0

24 時間年中無休で実行され、複数のアプリケーションからの要求に応答することが期待されるコンソール アプリケーションで WCF サービスをホストしました。継続的にリクエストを受け取る場合、または 4 時間のアイドル時間の後でも、うまく機能します。サービスをホストするために書かれたコードを以下に示します。

    static void Main(string[] args)
    {
        using (ServiceHost host = new ServiceHost(typeof(abcdService)))
        {
            host.Open();
            Console.ReadLine();
            host.Close();
        }
    }

WCF サービスでは、出力をコンソールに書き込んでいました。タイムアウト エラーがスローされると、WCF サービスのメソッドが要求を受信して​​いないことがわかりました。

数時間のアイドル時間の後でも、自己ホスト型 WCF サービスが単純な呼び出しに応答するようにするために必要な設定はありますか?

私が受け取ったエラーは以下のとおりです。

リクエスト チャネルは、00:00:59.9989999 の後に応答を待っている間にタイムアウトになりました。Request への呼び出しに渡されるタイムアウト値を増やすか、Binding の SendTimeout 値を増やします。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。---> System.TimeoutException: '' への HTTP 要求が、割り当てられたタイムアウトの 00:01:00 を超えました。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。---> System.Net.WebException: 操作がタイムアウトしました。テストの実行を中止しています。

注: WCF サービスをホストしているコンソール アプリケーションを再起動すると、正常に動作し始めます。

4

1 に答える 1

1

リクエストが処理される前にサーバーでキューに入れられ、タイムアウトになる場合があります。

1) WCF サービスで調整を試みます。

2) PerCallを使用してみてください。以下を使用して、インターフェイスでセッションを削除します。

[ServiceContract(Namespace="namespace", SessionMode=SessionMode.NotAllowed)]

インターフェイスを実装するコントラクト クラス

ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

トレースを有効にして、何が起こっているかを正確に確認できるはずです。

于 2013-07-08T10:22:59.243 に答える