WCF不活动超时

时间:2012-08-14 05:13:34

标签: c# .net wcf app-config

我创建了一个非常简单的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" />

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

  

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

这就是我的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>

我的问题是,如何将不活动时间设置为inifinte,并规避我得到的错误?

1 个答案:

答案 0 :(得分:3)

我认为您还需要将绑定上的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”。