首先,我想问一下理论,因为我没有找到任何相关文档:我们有一个 Silverlight 客户端和一个 WCF 服务。它们之间的通信是通过一个 pollingDuplexHttpBinding 进行的。假设服务器要向客户端发送一条消息,其大小大于设置的 MaxBufferSize 和 MaxReceivedMessageSize。在这种情况下,幕后发生了什么?
现在,这是我对这个问题的实际经验:服务器端的绑定配置:
<binding name="eventServiceBinding" sendTimeout="00:00:10" inactivityTimeout="24:00:00" receiveTimeout="24:00:00" serverPollTimeout = "00:01:00"/>
从服务器向客户端发送一个大的(即大于上面描述的客户端绑定属性中设置的值)消息。然后,发送第二条(不是大)消息=>我收到第二条消息的发送超时(我不知道客户端是否收到过第一条消息)。我试图搜索一些有用的日志记录,以查看第一条消息会发生什么。在服务器端(通过激活 WCF 记录器)和客户端(通过使用 Fidler)完成。我在日志中没有发现任何真正有趣的东西(但也许我没有在正确的地方搜索)。
此外 - 当 sendTimeout 设置为较大的值(比如 10 分钟)时,看起来从服务器发送到客户端的所有附加消息都“卡住”了 - 客户端永远不会收到,并且在达到发送超时之前不会抛出异常。此外,我遇到一个奇怪的现象,即任何客户端与托管 IIS 应用程序公开的任何服务之间都没有通信 - 直到我重置 IIS。尽管这与此处描述的先前问题有关,但我不是 100% 确定。
在客户端绑定中设置 MaxBufferSize 和 MaxReceivedMessageSize 属性似乎可以解决这两个问题。
请让我知道您是否对此类问题有任何经验,以及您是否可以在此处了解 WCF 幕后的实际情况。