【发布时间】:2014-06-29 17:57:57
【问题描述】:
我在我的 c# mvc 应用程序中使用 wcf 服务。我需要通过 wcf 到客户端(到控制器)获取大量数据(大约 20000 条记录)。
在本地版本中 - 我可以很好地获取所有记录,但在服务器版本中,如果我不将查询限制为 1000 条记录,我将一无所获。
当它不受限制并试图带来所有记录时,这就是我在客户端日志中得到的:
System.ServiceModel.CommunicationException:发生错误时 接收对 xxx/WCF.svc 的 HTTP 响应。这可能是由于 到不使用 HTTP 协议的服务端点绑定。这 也可能是由于 HTTP 请求上下文被 服务器(可能是由于服务关闭)。查看服务器日志 更多细节。 ---> System.Net.WebException:底层 连接已关闭:接收时发生意外错误。 ---> System.IO.IOException:无法从传输中读取数据 连接:已存在的连接被远程强行关闭 主持人。 ---> System.Net.Sockets.SocketException:现有连接 被远程主机强行关闭 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区,Int32 偏移量, Int32 大小)---内部异常堆栈跟踪结束---在 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区,Int32 偏移量, Int32 大小)在 System.Net.PooledStream.Read(Byte[] 缓冲区,Int32 偏移量,Int32 大小)在 System.Net.Connection.SyncRead(HttpWebRequest 请求,布尔值 userRetrievedStream, Boolean probeRead) --- 内部异常结束 堆栈跟踪 --- 在 System.Net.HttpWebRequest.GetResponse() 在 System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) --- 内部异常堆栈跟踪结束 ---
我已将此添加到客户端的 web.config 中,但没有帮助:
<behaviors>
<endpointBehaviors>
<behavior >
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
有什么想法吗?
【问题讨论】:
-
服务器端的 WCF 跟踪是否显示任何错误?
-
你为什么不只使用分页并一次请求说 1000 个项目?一次获取所有内容可以说是一个糟糕的设计选择。这是通过 Internet 还是仅仅通过公司 LAN?您仍然可以使用 tcp 进行跨域。如果它是一个局域网,你应该使用 tcpBinding。 J. Lowy,“编程 WCF 服务”,第 3 版
标签: c# .net wcf asp.net-mvc-4 cross-domain