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>
我有一个返回自定义对象列表及其大约 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>