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