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