下面是我所得到的错误:
通信对象System.ServiceModel.Channels.ServiceChannel无法用于通信,因为它处于故障状态。
我有一个使用WCF的服务,试图向另一个服务发送一个长度为86,284的字符串。这两个服务都具有以下设置(我使用的是NetTcpBinding):
MaxReceivedMessageSize = 100000;
MaxBufferPoolSize = 100000;
MaxBufferSize = 100000;
MaxItemsInObjectGraph = 2147483646我也有:
IncludeExceptionDetailInFaults = true我试图用它来获取一些有用的错误信息,但是出于某种原因,我得到了同样的东西。可能我只是不明白如何访问有用的错误消息。我也尝试过记录这个服务,但是它也给出了同样的错误。
我已经把它钻了下来,这样当我把这个字符串发送到另一个服务时,我就知道服务出错了。我已经确认,它工作100%的时候,发送另一个字符串,只有6392个字符长。这就是为什么我认为这些属性可以解决这个问题。如果任何人有任何想法或建议,这将是非常感谢。
哇,我终于收到一条错误消息:
已超过传入邮件(65536)的最大邮件大小配额。若要增加配额,请在适当的绑定元素上使用MaxReceivedMessageSize属性。
所以不知怎么的,我没有正确地设置这个属性。我创建NetTcpBinding,然后以这种方式设置属性。不知道为什么那不管用。
编辑:解决
发布于 2015-10-20 21:13:42
编辑(问题更改):检查您的ReaderQuotas上的NetTcpBinding。有一些额外的最大长度在那里。
C#使用UTF-16存储字符串,这意味着一个字符!=一个字节。您的86k字符串很可能超过100 k字节,这将超过指定的消息大小配额。可以尝试使用Encoding.GetBytes()检查字符串的实际大小(以字节为单位)。
发布于 2015-10-20 22:09:23
查看一下,看看是否超过了集合计数限制。
<serviceBehaviors>
<behavior name="SecureServiceBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>另外,这里是一些关于在iis中增加允许的最大请求大小的文档。
通信故障的异常可能是由于您使用会话造成的。一旦获得异常,您将继续接收错误,直到重新验证或刷新会话为止。
发布于 2015-10-21 15:53:42
对于两个相互通信的服务,其中一个服务托管在另一个windows服务中。我更改了另一个服务的MaxReceivedMessageSize,它修复了这个问题。它需要在两个窗口服务上设置这个属性,实际上并不需要在另一个服务中托管它。
https://stackoverflow.com/questions/33246673
复制相似问题