3

MSDN の例に厳密に従って、Windows サービスでホストされる非常に単純な WCF サービスを作成しました: http://msdn.microsoft.com/en-us/library/ff649818.aspx

最初の呼び出しから 10 分以上経過してから 2 回目の呼び出しを行うと、非アクティブ タイムアウト エラーが発生します。これが 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' を含むメッセージは、EndpointDispatcher での 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 に設定し、発生しているエラーを回避するにはどうすればよいですか?

4

1 に答える 1

4

バインディングの receiveTimeout も無限に設定する必要があると思います。この 2 つのプロパティ 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" を配置します。

于 2012-08-14T07:00:41.513 に答える