使用customBinding时的AddressAlreadyInUseException,但在使用netTcpBinding时没有

时间:2011-07-15 21:11:21

标签: wcf wcf-binding

我知道leasTimeout设置是connectionPoolSettings元素的一部分。 我知道connectionPoolSettings是tcpTransport的子代。 看起来这只能配置为customBinding而不是netTcpBinding

当我从netTcpBinding切换到customBinding时,我收到有关“IP端点上已经有一个监听器0.0.0.0:8091”的错误消息。请确保您没有尝试在应用程序中多次使用此端点并且那里是没有其他应用程序在此端点上侦听。“

未对端口规格进行任何更改。

这是我的netTcpBinding配置:

  <netTcpBinding>
    <binding name="TcpBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Streamed" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxConnections="10" maxReceivedMessageSize="100000000">
      <readerQuotas maxNameTableCharCount="1000000" maxStringContentLength="8192000" maxArrayLength="1638400" />
      <security mode="None">
      </security>
    </binding>
</netTcpBinding>

这是我的customBinding:

<customBinding>
    <binding name="TcpBindingCustom">
      <windowsStreamSecurity ProtectionLevel="None" />
      <tcpTransport>
        <connectionPoolSettings GroupName="default" leaseTimeout="00:05:00"
            idleTimeout="00:02:00" MaxOutboundConnectionsPerEndpoint="20" />
      </tcpTransport>
    </binding>
  </customBinding>

仅在使用customBinding时使用netTcpBinding时才会收到此错误消息。

如果我注释掉mex端点,我还确定我没有收到此错误消息,但这并不能解决问题,但可能会帮助我们找到解决方案。

1 个答案:

答案 0 :(得分:1)

不是问题的回答,而是当你的应用程序持有大量的记忆时可能会在将来拯救你的评论。您已将maxBufferPoolSize设置为524288并将maxReceivedMessageSize设置为100000000(752MBs),这可能意味着(取决于您如何设置应用程序池),您可以拥有524288个缓存缓冲区,每个缓冲区的大小为100000000(752MB)!我们最近遇到了一个问题,我们的服务(在iis7上运行)持有1GB的内存。这是由于设置了maxBufferPoolSize,它指定了可以缓存的最大缓冲区数。有一个高达524288的数字,你正在为自己找麻烦。我们已将此设置为较低的数字,但您需要考虑平衡,因为它会影响速度。在任何情况下,我都不会设置它超过maxReceivedMessageSize那么大! (它需要那么大吗?) - 无论如何只是一个提示,以节省你几天的内存分析和头部刮伤!