0

我创建了一个 wcf 服务,它可以正常处理小数据。(我当前的 MaxReceivedMessageSize 是 10485760)。当我发送一些超过 10485760 的巨大数据(比如 x 字节)时,客户端正在低于错误。

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

我知道这可以通过增加 MaxReceivedMessageSize 值来解决。但这里棘手的事情是,当我将 MaxReceivedMessageSize 保持为 10485760 并发送大小为 2x 字节的响应时,客户端在配置文件中指定的超时值时间后出现超时错误,而不是超过错误。

在服务器端调试提供以下错误

套接字连接被中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或者是潜在的网络资源问题造成的。

因为这个客户无法知道出了什么问题,也无法理解如何解决它。

我的问题是,在这两种情况下,我发送的数据都超过 MaxReceivedMessageSize 但错误是不同的。为什么?为什么客户端不能简单地收到“已超出最大消息大小配额”错误而不是关闭套接字?

我希望客户端接收错误并更正 MaxReceivedMessageSize 值,而不是套接字关闭和客户端超时

谢谢!

4

1 回答 1

0

服务总线缓冲区(简化客户端和服务器之间的数据)需要与原始 WCF 消息进行交互。

public sealed class MessageBufferClient
{
public void Send(Message message);
public void Send(Message message,TimeSpan timeout);
public Message Retrieve();
public Message Retrieve(TimeSpan timeout);
}

两种方法都有超时时间,无参数版本默认为一分钟。

对于发送方,超时指定缓冲区已满时要等待多长时间。对于检索器,超时指定缓冲区为空时要等待多长时间。

因此,对于 x 字节,调用 Retrieve 方法,该方法已等待默认 1 分钟,在这之间可能发生任何事情,例如不稳定的连接/连接丢失或缓冲区已满(如果已满,则下次不使用)。所以安全的假设是连接中的一些失败。

于 2018-01-06T07:19:28.960 回答