gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:04:29 25 4
gpt4 key购买 nike

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

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

  • 最大缓冲池大小 -> 6553600
  • 最大缓冲区大小 -> 6553600
  • MaxReceiveMessageSize -> 6553600

读者配额:

  • 最大数组长度 -> 0
  • MaxBytesPerRead -> 0
  • 最大深度 -> 0
  • MaxNameTableCharCount -> 0
  • 最大字符串内容长度 -> 0

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

Error while receiving http answer for http://localhost:8731/Design_Time_Addresses/DiscoDataSource/Service1/. Possible reasons: Endpointbinding doesn't use the HTTP protocol or the HTTP-requestcontext was canceled by the server.

Server stack trace:

at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)

at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)

at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)

at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)

at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)

at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)

at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)

at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

我想将服务配置为无论大小都返回结果。有人知道我需要在哪里更改配置吗?

提前致谢,弗兰克

最佳答案

如果您有大量正在序列化的对象,WCF 将达到配置的限制和 barf。您已经尝试了所有标准项,但遗漏了一项: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 文件中出现的位置,我显然省略了很多标签。

关于c# - 删除 WCF 服务答案的大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1874499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com