WCF-方法无法生成响应。响应头是否有任何长度限制?

时间:2015-03-16 17:30:17

标签: wcf basichttpbinding

我有一个WCF方法返回自定义对象列表及其大约20K记录。在我的本地机器上一切正常,但在实时服务器方法上无法产生任何响应。 我使用下面的绑定配置:

<bindings>
      <basicHttpBinding>
        <binding name="NewBinding0" closeTimeout="00:10:00" openTimeout="00:10:00"
          sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
        </binding>
      </basicHttpBinding>
    </bindings>

有人可以帮我解决这个问题吗?

亲切的问候, 米奇

2 个答案:

答案 0 :(得分:1)

最后,我设法解决了这个问题。修复是在WCF服务器配置中添加以下设置。

 <serviceBehaviors>
        <behavior>
<dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
</behavior>
      </serviceBehaviors>

答案 1 :(得分:0)

将以下部分添加到应用程序配置文件中,然后确保它正在写入的文件夹跟踪存在(下例中的c:\ temp \ WCFLogs)。 您应该开始看到一个ServerWCFTraces.svclog文件被创建 - 它可能会说长度为0个字节,直到您停止服务或它决定刷新到磁盘。

重现失败案例后,在打开Visual Studio的计算机上打开日志文件(或从此处下载查看器:SvcTraceViewer from MSDN

有一些说明可以在MSDN链接上使用该工具,但实际上您可以在活动窗格(左侧)中查找错误(以红色突出显示),然后查看失败的操作(右上方窗格)和在详细信息部分(右下方窗格)中,将会有一个内部异常的描述,它几乎总是告诉您哪个显式限制被破坏,以及要解决它的属性/属性增加。

<system.diagnostics>
  <sources>
     <source propagateActivity="true" name="System.ServiceModel" switchValue="Information, ActivityTracing">
        <listeners>
           <add name="ServiceModelMessageLoggingListener">
              <filter type="" />
           </add>
        </listeners>
     </source>
     <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing">
        <listeners>
           <add name="ServiceModelMessageLoggingListener">
              <filter type="" />
           </add>
        </listeners>
     </source>
  </sources>
  <sharedListeners>
     <add initializeData="C:\temp\WCFLogs\ServerWCFTraces.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
        <filter type="" />
     </add>
  </sharedListeners>
</system.diagnostics>