5

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 応答が返されるまでの時間の長さを制御することだけです。

4

2 に答える 2

1

IISとテストWCFサービスで多くの実験を行った後、同じサーバー上でも問題を再現できませんでした。この問題は、社内の別のグループにのみ見られます。

HTTP 503エラーを強制する唯一の方法は、アプリプールをオフラインにすることでしたが、これにより、リクエストが受信されるとすぐにエラーが返されることが予想されました。

さらに調査したところ、IISからの503応答に関連付けられたHTMLは、クライアントに返されるHTMLとは異なることがわかりました。

確かにこれはまだ証明されていませんが、この問題はクライアントとサーバー間のネットワークコンポーネントが原因であると結論付けました。

実際、その間にはタイムアウトを返すプロキシがありました。

于 2012-11-28T08:54:23.680 に答える
1

通常、サービス エンドポイントに影響を与えないバインディングを変更する場合、それはバインディングがエンドポイントに接続されていないためです。

すべてが現在 503 になっており、以前は機能していた場合は、アプリケーション プールの ID であるユーザー アカウントのパスワードが期限切れになっている可能性があります。

一部の呼び出しでは機能し、他の呼び出しでは機能せず、負荷が増加している場合は、クライアントが接続を閉じておらず、同時呼び出しの最大数のデフォルト制限に達している可能性があります。

于 2012-11-21T21:08:09.833 に答える