首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF服务器故障

WCF服务器故障
EN

Stack Overflow用户
提问于 2015-10-20 20:58:33
回答 3查看 88关注 0票数 0

下面是我所得到的错误:

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

我有一个使用WCF的服务,试图向另一个服务发送一个长度为86,284的字符串。这两个服务都具有以下设置(我使用的是NetTcpBinding):

代码语言:javascript
复制
MaxReceivedMessageSize = 100000;
MaxBufferPoolSize = 100000;
MaxBufferSize = 100000;
MaxItemsInObjectGraph = 2147483646

我也有:

代码语言:javascript
复制
IncludeExceptionDetailInFaults = true

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

我已经把它钻了下来,这样当我把这个字符串发送到另一个服务时,我就知道服务出错了。我已经确认,它工作100%的时候,发送另一个字符串,只有6392个字符长。这就是为什么我认为这些属性可以解决这个问题。如果任何人有任何想法或建议,这将是非常感谢。

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

已超过传入邮件(65536)的最大邮件大小配额。若要增加配额,请在适当的绑定元素上使用MaxReceivedMessageSize属性。

所以不知怎么的,我没有正确地设置这个属性。我创建NetTcpBinding,然后以这种方式设置属性。不知道为什么那不管用。

编辑:解决

EN

回答 3

Stack Overflow用户

发布于 2015-10-20 21:13:42

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

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

票数 0
EN

Stack Overflow用户

发布于 2015-10-20 22:09:23

查看一下,看看是否超过了集合计数限制。

代码语言:javascript
复制
<serviceBehaviors>
    <behavior name="SecureServiceBehavior">
        <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
</serviceBehaviors>

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

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

票数 0
EN

Stack Overflow用户

发布于 2015-10-21 15:53:42

对于两个相互通信的服务,其中一个服务托管在另一个windows服务中。我更改了另一个服务的MaxReceivedMessageSize,它修复了这个问题。它需要在两个窗口服务上设置这个属性,实际上并不需要在另一个服务中托管它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33246673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档