携带大数据时WCF套接字超时异常

时间:2014-01-29 13:42:13

标签: c# wcf web-services sockets

我在webservice WCF上新工作,我被赋予了在大数据的情况下测试web服务的责任。所以,通过Entity Object我带着约。 16000多个记录,但我的代码抛出异常,如:

套接字连接已中止。这可能是由于处理消息的错误或远程主机超出接收超时或基础网络资源问题引起的。本地套接字超时为'00:24:59.9989991'。

虽然我已在Socket Timeout个文件中将App.Config and Web.Config 5增加到25 ,但仍然存在相同的错误。这让我相信必须存在大量数据问题。

App.Config中

<bindings>  
  <netTcpBinding>  
    <binding name="tcpBinding"  
              maxBufferSize="2147483647"  
              maxReceivedMessageSize="2147483647"  
              maxBufferPoolSize="2147483647"  
             receiveTimeout="00:06:00" sendTimeout="00:06:00" >  
      <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />  
      <security mode="None" />  
    </binding>  
  </netTcpBinding>  
  <webHttpBinding>  
    <binding name="RESTBinding"  
              maxBufferSize="2147483647"  
              maxReceivedMessageSize="2147483647"  
              maxBufferPoolSize="2147483647"  
             receiveTimeout="00:06:00" sendTimeout="00:06:00" >  
      <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />  
      <security mode="None" />  
    </binding>  
  </webHttpBinding>  
</bindings>  

cs文件

userObject = client.GetAll().ToList();

并且GetALL()有这个定义:

var result = (from user in entity.User select user).ToList();
    return result;

并且,上面的代码返回16000+条记录,但由于哪个webservice提供异常。 我已经从网上做过关于这个主题的研发,但没有找到任何有用的答案,任何人都可以建议我该怎么做。

2 个答案:

答案 0 :(得分:0)

一个好的决定就是将大数据打包成更小的包。

答案 1 :(得分:0)

将API修改为“页面”结果。换句话说,不是GetALL()公开Get(int start, int end)而是让用户一次通过它们。您在GetALL中的代码将更改为:

var result = (from user in entity.User select user).Skip(start).Take(end-start).ToList();
    return result;

这对用户来说也是一件更好的事情,所以你不要用太多数据来压倒他们。