繁体   English   中英

删除WCF服务答案的大小限制

[英]Remove size limit of WCF-Service answers

我创建了一个WCF服务,该服务在W2008服务器上运行操作,并作为结果返回数据结构。 问题是,此结果可能比标准服务配置似乎接受的结果更大。 因此,我尝试增加(或删除)此最大大小,但似乎找不到正确的属性。

在WCF的App.config中,我更改了basicHttpBinding的以下值:

  • MaxBufferPoolSize-> 6553600
  • MaxBufferSize-> 6553600
  • MaxReceiveMessageSize-> 6553600

读者配额:

  • MaxArrayLenght-> 0
  • MaxBytesPerRead-> 0
  • 最大深度-> 0
  • MaxNameTableCharCount-> 0
  • MaxStringContentLength-> 0

然后,我启动WCF-Testclient调用该服务。 我确保basicHttpBinding属性的值等于配置中的值。 当我以某种方式调用服务时,结果集很小,一切正常。 但是,当这个大小增加时,我最终会得到错误(从德语翻译):

收到http :// localhost:8731 / Design_Time_Addresses / DiscoDataSource / Service1 /的 http回答时出错。 可能的原因:端点绑定不使用HTTP协议,或者服务器取消了HTTP-requestcontext。

服务器堆栈跟踪:

在System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException,HttpWebRequest请求,HttpAbortReason abortReason)

在System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan超时)

在System.ServiceModel.Channels.RequestChannel.Request(消息,TimeSpan超时)

在System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息,TimeSpan超时)

在System.ServiceModel.Channels.ServiceChannel.Call处(字符串操作,布尔单向,ProxyOperationRuntime操作,Object [] ins,Object [] outs,TimeSpan超时)

在System.ServiceModel.Channels.ServiceChannel.Call处(字符串操作,布尔型单向,ProxyOperationRuntime操作,Object [] ins,Object [] outs)

在System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime操作)

在System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage消息)

我想配置服务以返回结果,而不管大小如何。 有人知道,我需要在哪里更改配置?

预先感谢,弗兰克

如果要序列化的对象很多,则WCF将达到配置的限制和限制。 您已经尝试了所有标准项,但是其中一个项被遗漏了: maxItemsInObjectGraph 就像其他配置值一样,您需要同时在服务器端客户端进行设置。 这是一个示例配置代码段,其值不必要地大:

<system.serviceModel>
 <behaviors>
   <serviceBehaviors>
     <behavior name="ServiceBehavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
     </behavior>
   </serviceBehaviors>
   <endpointBehaviors>
     <behavior name="ClientBehavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
     </behavior>
   </endpointBehaviors>
 </behaviors>
</system.serviceModel>

我显然省略了很多标签,而是倾向于说明maxItemsInObjectGraph在.config文件中的位置。

您是否也在客户端和服务器端都更改了这些值? 您需要在通信的两端都进行更改-只有这样,它才能起作用。

如果您尚未在服务器端更改它们,则两者中的较小值(客户端和服务器值)将“获胜”。

但是,也许实际上是导致服务器中止的超时设置 在绑定上,您可以调整超时-默认情况下为60秒-因此,如果获取数据并根据需要进行组装需要更多时间,则需要调整绑定上的SendTimeout ,而不是大小设置。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM