IIS でホストされている WCF サービスがあります。ログ ファイルから、実行に 3 分以上かかる要求を送信するクライアントが HTTP 503 (サービスを利用できません) エラーを受け取ることがわかります。
タイムアウトを変更するにはどうすればよいですか? 動作をテストするために、タイムアウトを 3 秒に短縮して、実際にタイムアウトになることを確認しました。
私はもう試した
<system.web>
<httpRuntime executionTimeout="3"/>
</system.web>
何もしないように見えました。
また、バインディングを無駄に変更しようとしました。
<basicHttpBinding>
<binding name="basicHttp" receiveTimeout="00:00:03" sendTimeout="00:00:03" >
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
注意してください、私は、私たちが制御する期間の後に、WCF サービスに何らかのエラーを返させようとしています。予想以上に時間がかかったリクエストが終了するとは思っていません。
私が髪を引き裂く前に、どんな助けも最も感謝しています。
明確にするために...
このサービスは数か月間稼働しています。しかし、時折実行される長時間の要求を処理するとき、クライアントは 3 分後に HTTP 503 応答を受け取ります。バックグラウンドで、リクエストが適切に処理されたことがわかりますが、5 分以上かかりました。クライアントがすでにエラー応答を受け取っているため、明らかにこの時点では手遅れです。
その他のリクエストは通常どおり処理されています。
この時点でのシステムの負荷は非常に低くなります。実際、これはテスト環境であり、トランザクションは一度に 1 つずつ重複することはありません。
また、バインディングがエンドポイントに接続されていることも確かです。WCF Config Editor で構成ファイルを開きましたが、すべてが正しくリンクされています。
この時点で WCF でタイムアウトを構成することはできますか? そうでない場合は理解できますが、なぜHTTP 503エラーが返されるのですか?
私たちが本当にやりたいことは、503 応答が返されるまでの時間の長さを制御することだけです。