WCF服务器故障

时间:2015-10-20 20:58:33

标签: c# wcf service

以下是我收到的错误:

  

通讯对象,   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,然后以这种方式设置属性。不知道为什么那不起作用。

编辑:解决了

3 个答案:

答案 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服务上设置此属性,实际上不需要在另一个托管的服务器上。

相关问题