首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

WCF 基础联接已经关闭:连接被意外关闭(大数据量)

2012-12-22 
WCF 基础连接已经关闭:连接被意外关闭(大数据量)表的字段有64个,查询1000条以内的没有问题,1000以上就报错

WCF 基础连接已经关闭:连接被意外关闭(大数据量)
表的字段有64个,查询1000条以内的没有问题,1000以上就报错。配置里需要改的也改了。使用trace_log跟踪提示的是
“进行序列化时出错: ReadVAJ1sResult。InnerException 消息是“对象图中可以序列化或反序列化的项目数目上限为“65535”。请更改对象图或增加 MaxItemsInObjectGraph 的配额”,但是,该配置我已经改过了,还提示这个异常。
另外,我在把服务端的MaxItemsInObjectGraph改成1的时候,程序依然是在1000条以内正常,1000以上报错。我感觉是不是我的服务端的配置没起作用?或者还有其它什么原因引起的这个错误。

附:客户端和服务端配置

服务端:


<system.serviceModel>
      <services>
      <service behaviorConfiguration="ServiceBehavior" name="Service.Service">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="testBinding"
          contract="IContract.IService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <timeouts closeTimeout="10:10:10" />
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
           <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

      <bindings>
          <basicHttpBinding>
              <binding name="testBinding" closeTimeout="10:50:00" openTimeout="10:10:00"
                  receiveTimeout="10:10:00" sendTimeout="10:10:00" allowCookies="false"
                  bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                  maxBufferSize="2147483647" maxBufferPoolSize="2146483647"
                  maxReceivedMessageSize="2147483647" messageEncoding="Text"
                  textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
                  <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
                      maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />


                  <security mode="None" />
              </binding>
          </basicHttpBinding>
      </bindings>
  </system.serviceModel>



客户端:

<system.serviceModel>
         <behaviors>
            <endpointBehaviors>
                <behavior name="metadataBehavior">
                    <dataContractSerializer maxItemsInObjectGraph="2147483647" />
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService" closeTimeout="10:55:00"
                    openTimeout="10:55:00" receiveTimeout="10:50:00" sendTimeout="10:55:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="2147483647" maxBufferPoolSize="2146483647"
                    maxReceivedMessageSize="2147483647" messageEncoding="Text"
                    textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
                    <readerQuotas maxDepth="64" maxStringContentLength="2147483647"
                        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>


                </binding>
            </basicHttpBinding>
        </bindings>

        <client>
            <endpoint address="http://dd0402ijd/WCFSVN/Service.svc" behaviorConfiguration="metadataBehavior"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService"
                contract="wcfSVC.IService" name="BasicHttpBinding_IService" />
         </client>
    </system.serviceModel>


[最优解释]
引用:
HttRequest也配置过,没用。我现在用的就是在本地。调试了很久都没找到问题所在。


你把测试工程上传下,我下来跑跑看。


[其他解释]
http://blog.csdn.net/fangxinggood/article/details/6031072
[其他解释]
楼上是不是不看问题的具体内容就直接发了个地址? 你发的这个地址里的东西,我都配置过了。
[其他解释]
确认一下,客户端连的服务端配置已经修改了?还是只是修改了本机,而发布的服务并未修改。



[其他解释]
引用:
确认一下,客户端连的服务端配置已经修改了?还是只是修改了本机,而发布的服务并未修改。

都修改了。客户端的MaxItemsInObjectGraph是有效的,因为我将其值改成1,是对数据结果产生影响了。但是服务端,我将这个属性的值改成1,却对结果没有任何影响
[其他解释]
那真是奇怪了。一般修改上面的配置就能解决了。
会不会是IIS的HttRequest大小限制。

<httpRuntime maxRequestLength="20000" executionTimeout="600" />

另外,你先本地创建一个WCF 工程测试一下,是否发生同样的问题。


[其他解释]
HttRequest也配置过,没用。我现在用的就是在本地。调试了很久都没找到问题所在。
[其他解释]
该回复于2012-04-18 10:20:28被版主删除
[其他解释]
感谢fangxinggood的帮忙。 
我已经找到问题的所在了,是实体序列化造成的。数据层使用了一个ORM框架,实体的序列化实际上没有完成(即使使用了DataContract和DataMemeber),所以在服务端配置的MaxItemsInObjectGraph总是没起到作用。
[其他解释]
hi,楼主,我也碰到同样的问题,那么样保证序列化实际完成了呢?(除了使用DataContract和DataMemeber)

热点排行