5

WCFサーバーを監視し、サーバーがダウンした場合に電子メール通知を送信したい。これを実現するために、サーバーにダミーのリクエストを定期的に送信し、応答が返されるかどうかを確認するコンソールアプリを作成しています。コンソールアプリが例外を受信すると、サーバーがダウンするなどの問題がサーバーに発生します。

ただし、問題は、サーバーのステータスが異なると例外が発生することです。以下は、サーバーが異なるステータスのときにサーバーから返される例外です。ただし、すべてサーバーダウンカテゴリに属しているようです。何か案が??:

IISがオフになっている場合

System.ServiceModel.EndpointNotFoundException、

メッセージ:メッセージを受け入れることができるhttp://localhost/service.svc
で リッスンしているエンドポイントがありませんでした。これは多くの場合、誤ったアドレスまたはSOAPアクションが原因で発生します。詳細については、InnerException(存在する場合)を参照してください。

内部例外メッセージ:リモートサーバーがエラーを返しました:(404)見つかりません

Web.configファイルが意図的に間違った名前に変更された場合:

System.ServiceModel.ServiceActivationException
リンク: http://localhost/service.svc
メッセージ:
要求されたサービス「http://localhost/service.svc」をアクティブ化できませんでした。詳細については、サーバーの診断トレースログを参照してください。

その他の不明な理由

System.ServiceModel.ServerTooBusyException
メッセージ:http://localhost/service.svc
' にあるHTTPサービスがビジーです。 メッセージ: リモートサーバーがエラーを返しました:(503)サーバーを利用できません。

アップデート1

例外は常にhttpステータスコードを返すとは限りません。

Update 2 WCFプロキシを使用してサービスを呼び出す以外に、以下のようにWebRequestも使用する必要があります。

       try
        {
            WebRequest webRequest = WebRequest.Create(uri);
            webRequest.Method = "GET";

            HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse();                             

        }
        catch ()  //what excpetion will tell me server is down??
        {
           ...
        }
4

2 に答える 2

2

エラーの実際の内容は、実際には重要ではありません-サービスでの個々の操作を監視していない限り(つまり、特定のURLへのデータを含むPOSTが特定の応答を返す必要があります)-現実的には、あなたはただステータスコード自体を調べます。そのためには、すべてのHTTP ステータス コードを調べて、エラーのように見えるコードを確認する必要があります。

出発点として、ほぼすべての 5xx コードを検討することをお勧めします。それらはすべてサーバーエラーに関連しているためです。

4xx コードのいくつかを検討することもできます (ただし、これらは通常クライアントに接続されているため、冷酷に注意してください)。特に:

400 - Bad Request- サーバーがリクエストを理解できることを確認できる限り

404 - Not Found- 指定された URLが存在することが確実な場合

405 - Method Not Allowed- 指定された HTTP 動詞がサポートされていることが確実な場合( POST または DELETE など)

より狭い 4xx コードの一部については、たとえば413 Request Entity Too Largeまたは414 Request-URI Too Long; これらは、セキュリティ アップデートなどのために、通常の操作を数日または数か月行った後に発生する可能性があります。この場合、必ずしもサービスがダウンしていることを特定しているわけではありませんが、意図した機能を実行できないことを予期している可能性があります。

于 2012-02-06T21:52:20.903 に答える
1

400 または 500 番台の HTTP ステータス結果コードは、リクエストの処理を妨げる問題です。これらのエラーはすべて System.ServiceModel.CommunicationException から派生しているため、それを確認してください。

于 2012-02-06T21:55:03.477 に答える