WCF- 方法无法生成响应。响应头有长度限制吗?

WCF- Method unable to generate response. Is there any length limit for response header?

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

<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>

谁能帮我解决这个问题?

亲切的问候, 米奇

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

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

在该 MSDN link 上有一些使用该工具的说明,但实际上您在 activity 窗格(左)中查找错误(以红色突出显示),然后在失败的操作(右上窗格)和详细信息部分(右下窗格),将描述正在抛出的内部异常,它几乎总是告诉您违反了哪个明确限制以及什么 attribute/property增加解决。

<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>

最后,我设法修复了它,修复方法是在 WCF 服务器配置中添加以下设置。

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