【问题标题】:WCF Server FaultingWCF 服务器故障
【发布时间】:2015-10-20 20:58:33
【问题描述】:

这是我得到的错误:

通讯对象, System.ServiceModel.Channels.ServiceChannel,不能用于 通信,因为它处于故障状态。

我有一个使用 WCF 的服务尝试将长度为 86,284 的字符串发送到另一个服务。两种服务都有这些设置(我使用的是 NetTcpBinding):

MaxReceivedMessageSize = 100000;
MaxBufferPoolSize = 100000;
MaxBufferSize = 100000;
MaxItemsInObjectGraph = 2147483646

我也有:

IncludeExceptionDetailInFaults = true

我正在尝试使用它来获取某种有用的错误消息,但由于某种原因,我得到了同样的东西。我可能只是不明白如何访问有用的错误消息。我也尝试过记录该服务,但它给出了同样的错误。

我已经深入了解它,以便我知道当我将此字符串发送到其他服务时服务出现故障。我已经确认它可以在 100% 的时间内发送另一个只有 6392 个字符长的字符串。这就是为什么我认为这些属性可能会解决这个问题。如果有人有任何想法或提示,将不胜感激。

哇,我终于收到一条错误消息:

已超出传入邮件的最大邮件大小配额 (65536)。要增加配额,请使用 MaxReceivedMessageSize 相应绑定元素上的属性。

不知何故我没有正确设置此属性。我创建了 NetTcpBinding,然后以这种方式设置属性。不知道为什么那行不通。

编辑:已解决

【问题讨论】:

  • 你是在IIS中运行服务吗,我知道也可以设置消息大小限制。
  • 不,它不是网络服务。我正在以编程方式设置大多数属性,否则我会在 App.config 中进行设置

标签: c# wcf service


【解决方案1】:

编辑(问题已更改):检查 NetTcpBinding 上的 ReaderQuotas。里面还有一些额外的最大长度。

C# 使用 UTF-16 存储字符串,这意味着一个字符 != 一个字节。您的 86k 字符串很可能超过 100k 字节,这将超过指定的消息大小配额。您可以尝试使用 Encoding.GetBytes() 检查字符串的实际大小(以字节为单位)。

【讨论】:

  • 在将字节数组长度转换为字符串之前,我已经记录了它。是 64712
  • 看来 ReaderQuotas 是可能的,我会告诉你的。
  • 我更改了 ReaderQuotas.MaxStringContentLength,但遇到了同样的问题。如果我通过字符串发送,为什么不解决它?如果没有,我怀疑更改 MaxArrayLength 或任何其他属性会修复它。问题是我知道它与长度有关,但没有一个解决方案可以解决它......
  • 确保您正确设置了阅读器配额属性。 “binding.ReaderQuotas.MaxStringContentLength = 10000000”实际上不起作用——见experts-exchange.com/Programming/Editors_IDEs/Q_23510900.html
  • 该链接看起来像是在尝试设置 ReaderQuotas 属性,该属性是只读的。我专门设置 MaxStringContentLength 没有任何问题。我收到的错误消息也明确表示要更改 MaxReceivedMessageSize,所以我很好奇这是否是我应该关注的。
【解决方案2】:

看看是否超过了收集计数限制。

<serviceBehaviors>
    <behavior name="SecureServiceBehavior">
        <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
</serviceBehaviors>

另外,here 是一些关于增加 iis 中允许的最大请求大小的文档。

通信故障的异常可能是由于您使用会话。一旦您收到异常,您将继续收到错误,直到您重新验证或刷新会话。

【讨论】:

    【解决方案3】:

    对于相互通信的两个服务,其中一个托管在另一个 Windows 服务中。我更改了此其他服务的 MaxReceivedMessageSize 并解决了问题。它需要在两个 Windows 服务上设置此属性,而实际上在托管在另一个服务中的一个上不需要它。

    【讨论】:

      猜你喜欢
      • 2011-07-16
      • 2016-08-05
      • 2012-09-14
      • 2018-09-14
      • 2011-04-02
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多