仅当使用二进制序列化时 WCF 超时

Joh*_*ell 5 .net c# iis wcf

我们有一个 .NET 4.0 WPF 客户端应用程序,它使用 WCF 与服务器组件(托管在 IIS 中)进行通信。大多数通信是使用basicHttpBindingSOAP 完成的(内容类型:text/xml);然而,出于性能原因,一个端点被切换为使用customBinding二进制序列化(内容类型:application/soap+msbin1)。

因此,以“.svc”结尾的旧 URL 现在具有额外的“/binary”扩展名,例如“.svc/binary”。

到现在为止,这已经运行了 2 年,没有出现任何问题。

有一天,我接到一个客户的电话,看起来好像有什么东西正在“阻止”使用这个支持二进制的端点进行的呼叫。奇怪的是,它们不仅会彻底失败,而且会超时,即使我将超时延长到 5 分钟之类的疯狂值,调用最终也会超时。然而,一旦我切换回basicHttpBinding,几乎自动地,一切都开始工作得很好!

这可能是网络安全软件吗?客户端配置?IIS 设置?我真的不知道什么会阻止这个......

还有其他人经历过类似的事情吗?

这是客户端配置文件中的 customBinding:

<customBinding>
        <binding name="CustomBinding_IDataAccess" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00">
          <binaryMessageEncoding maxReadPoolSize="2147483647" maxSessionSize="2147483647" maxWritePoolSize="2147483647">
            <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="2147483647"/>
          </binaryMessageEncoding>
          <httpTransport transferMode="Streamed" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" useDefaultWebProxy="true"/>
        </binding>
      </customBinding>
Run Code Online (Sandbox Code Playgroud)

此外,快速浏览一下 IIS 日志,会显示该端点的大量条目: Request_CancelledTimer_EntityBody等。

日志文件中没有其他端点有消息。