以下是我收到的错误:
通讯对象, System.ServiceModel.Channels.ServiceChannel,不能用于 沟通,因为它处于Faulted状态。
我有一个服务使用WCF尝试将长度为86,284的字符串发送到另一个服务。两种服务都有这些设置(我使用NetTcpBinding):
MaxReceivedMessageSize = 100000;
MaxBufferPoolSize = 100000;
MaxBufferSize = 100000;
MaxItemsInObjectGraph = 2147483646
我也有:
IncludeExceptionDetailInFaults = true
我正在尝试使用它来获取某些有用的错误消息,但出于某种原因,我得到同样的东西。我可能无法理解如何访问有用的错误消息。我也尝试过登录该服务,但它也给出了同样的错误。
我已将其向下钻取,以便在将此字符串发送到其他服务时,我知道服务出现故障。我已经确认它可以100%的时间发送另一个只有6392个字符的字符串。这就是我认为这些属性可以解决这个问题的原因。如果有人有任何想法或提示,我们将非常感激。
哇我终于得到一条错误信息:
已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请使用MaxReceivedMessageSize 适当的绑定元素上的属性。
Sooooo不知怎的,我没有正确设置这个属性。我创建了NetTcpBinding,然后以这种方式设置属性。不知道为什么那不起作用。
编辑:解决了
答案 0 :(得分:0)
编辑(问题已更改):检查NetTcpBinding上的ReaderQuotas。那里有一些额外的最大长度。
C#使用UTF-16存储字符串,这意味着一个字符!=一个字节。您的86k字符串很可能超过100k字节,这将超过指定的消息大小配额。您可以尝试使用Encoding.GetBytes()来检查字符串的实际大小(以字节为单位)。
答案 1 :(得分:0)
看看是否超过了收集计数限制。
<serviceBehaviors>
<behavior name="SecureServiceBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
此外,here是一些有关增加iis中允许的最大请求大小的文档。
关于通信故障的例外可能是由于您使用会话。获得异常后,您将继续收到错误,直到您重新进行身份验证或刷新会话。
答案 2 :(得分:0)
对于与彼此通信的两个服务,其中一个服务托管在另一个Windows服务中。我更改了此其他服务的MaxReceivedMessageSize并解决了该问题。它需要在两个Windows服务上设置此属性,实际上不需要在另一个托管的服务器上。