WCF 服务无法将大数组从 DAL 传送到 MVC

Posted

技术标签:

【中文标题】WCF 服务无法将大数组从 DAL 传送到 MVC【英文标题】:WCF service failing to carry large array of from DAL to MVC 【发布时间】:2014-08-18 05:00:16 【问题描述】:

我有 WCF 服务,它返回 6500 行数据列表的数据。当我尝试从服务中检索该数据时,它会引发错误,例如- 接收对 http://myservice.myDomain.com/Services/myTestService.svc 的 HTTP 响应时出错。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。查看服务器日志了解更多详情

我已尝试增加配置时间,但问题仍然存在。

在 Trace 中我得到的结果如下所示:

跟踪日志显示如下错误: 接收对 http://myservice.myDomain.com/Services/myTestService.svc 的 HTTP 响应时出错。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。

堆栈跟踪:

System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason) System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan 超时) System.ServiceModel.Channels.RequestChannel.Request(消息消息,TimeSpan 超时) System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息消息,TimeSpan 超时) System.ServiceModel.Channels.ServiceChannel.Call(字符串操作,布尔单向,ProxyOperationRuntime 操作,Object[] 输入,Object[] 输出,TimeSpan 超时) System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)

【问题讨论】:

【参考方案1】:

您应该做的第一件事是设置并开始使用服务跟踪查看器工具,这将允许您进一步深入了解特定调用并准确找出错误所在。

http://msdn.microsoft.com/en-us/library/ms732023(v=vs.110).aspx

http://msdn.microsoft.com/en-us/library/ms751526(v=vs.110).aspx

一旦启动并运行它,您就可以运行您的代码,然后查看您遇到的具体错误,这通常能够告诉您是哪个字段或对象导致了错误。您在调试中遇到的错误只是表明某些事情失败了,您需要使用跟踪查看器来查看。

如果没有来自日志记录的实际错误,很难确切说明是什么导致了错误,但最常见的原因是服务返回的对象缺乏正确的序列化。

编辑:

查看您的堆栈跟踪,您可能在返回的对象的某处有一个循环引用,您需要将 IsReference=true 标志添加到有问题的对象http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractattribute.isreference(v=vs.95).aspx

如果您可以发布要返回的对象的代码,我可能会更好地指出您的问题。

编辑 2:此外,如果您可以在 svclog 文件中发布异常的 XML(在服务跟踪查看器中复制 XML 表的内容),这也将进一步阐明。

【讨论】:

以上是关于WCF 服务无法将大数组从 DAL 传送到 MVC的主要内容,如果未能解决你的问题,请参考以下文章

我无法在 VS2012 中将服务引用(WCF 库)添加到 MVC4

从 MVC 项目调用 WCF 服务时出错

如何从 WCF 打印数组的值以形成标签?

使 DAL 可扩展的模式/想法/经验

从同一服务器上的 MVC 调用 WCF 服务时出现 SocketException

如何从 MVC 应用程序发出的 WCF 服务调用中获取域\用户名?