WCF 不活动超时

Posted

技术标签:

【中文标题】WCF 不活动超时【英文标题】:WCF inactivity timeout 【发布时间】:2012-08-10 09:06:45 【问题描述】:

我创建了一个非常简单的 WCF 服务,托管在 Windows 服务上,紧跟 MSDN 上的示例:http://msdn.microsoft.com/en-us/library/ff649818.aspx

如果我在第一次调用后超过 10 分钟对我的服务进行第二次调用,我会收到不活动超时错误。我了解这是 WCF 客户端的默认设置。

但是,当我从

更改我的 app.config
 <reliableSession ordered="true" inactivityTimeout="00:10:00"
                   enabled="false" />

 <reliableSession ordered="true" inactivityTimeout="infinite"
                    enabled="true" />

当我尝试拨打电话时收到此错误:

带有动作的消息 'http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence' 不能 由于 ContractFilter 不匹配,在接收方处理 端点调度程序。这可能是因为合同不匹配 (发送方和接收方之间的操作不匹配)或绑定/安全性 发送者和接收者之间的不匹配。检查发件人和 接收方具有相同的合同和相同的约束力(包括 安全要求,例如消息,传输,无)。

这就是我的 WCF 配置文件在 Windows 服务上的样子。

  <system.serviceModel>
<services>
  <service name="Asis.IBSS.Milestone.WCFService.ServiceImplementation.VideoService">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="" contract="Asis.IBSS.Milestone.WCFService.ServiceContract.IVideoService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8555/MilestoneService"/>
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="false"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

我的问题是,如何将 inactivityTimeout 设置为 inifinte,并规避我遇到的错误?

【问题讨论】:

我仍然需要 NetTcpBinding。 好的 - 但是如果你不需要reliableSession,就不要启用它...... 【参考方案1】:

我认为您还需要将绑定上的 receiveTimeout 设置为无限。这两个属性,receiveTimeout 和 inactivityTimeout 有一些相互依赖,如果你将 inactivityTimeout 设置为比 receiveTimeout 更高的值,你可能会得到一些错误。

例如:

        <bindings>
        <wsFederationHttpBinding>
    <binding name="someServiceFederatedBinding" maxReceivedMessageSize="2147483647" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="infinite" sendTimeout="01:00:00">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    </binding>
        </wsFederationHttpBinding>
    </bindings>

并将 bindingConfiguration="someServiceFederatedBinding" 放入您的服务中。

【讨论】:

我会尝试添加一个名称。是的,两者都设置为无限。

以上是关于WCF 不活动超时的主要内容,如果未能解决你的问题,请参考以下文章

WCF 可靠会话的目的是啥?

启用可靠会话时 WCF ContractFilter 不匹配

由于不活动而导致会话超时[重复]

Sails js错误:握手不活动超时

错误:握手不活动超时(MySQL + Node.js)

Amazon EC2 ssh 由于不活动而超时