0

毎日 Web サービスにデータを送信する ac#.net wpf アプリケーションがあります。共有ホスティングで Web サービスをホストする予定です。

私の質問は、Web サービスが常に稼働していることを確認する方法です。つまり、Web サーバーが数日間ダウンした場合、何に注意すればよいですか? 複数のサーバーを維持する必要がありますか? これを達成するには、wpf Windows アプリケーションで両方のサーバーの IP アドレスに言及する必要がありますか?

Googleで検索しましたが、正しい答えが見つかりませんでした。コミュニティからのリンクは大歓迎です。

4

2 に答える 2

1

グーグルで答えが見つからないのは、正解がないからです。アプリケーションのニーズに基づいて、これらの問題へのアプローチは人それぞれ異なります。あなたの質問のいくつかに答えるために、私は実際には一般的な提案しか提供できません.

私の質問は、Web サービスが常に稼働していることを確認する方法です。

稼働時間を最大化することは重要であり、慎重な設計が必要になる場合があります。エラー状態を適切に処理し、スローされた入力を処理できる必要があります。これに関する 1 つの注意点は、アップタイムが重要である一方で、データの精度がより重要になる可能性があることです。この場合、Web サービスは稼働しているように見えるよりも停止している方が良いかもしれませんが、データが破損しています。

Web サーバーが数日間ダウンした場合、どのような注意が必要ですか?

データを適切にキューに入れ、サービスがバックアップされたときに送信できるように、クライアント アプリケーションをコーディングする必要があります。また、サービスを賢く行う必要があります (つまり、データのアップロード == データの日付であると想定しないでください)。クライアント アプリケーションが何日もダウンする可能性があることも忘れないでください (自然災害、停電、メンテナンスのためのダウンタイム、週末のクラッシュなど)。

複数のサーバーを維持する必要がありますか?

これを実現するには、wpf Windows アプリケーションで両方のサーバーの IP アドレスを指定する必要がありますか?`

それは間違いなくオプションです。冗長性により、ダウンタイムを最小限に抑えながら、サーバーのメンテナンスやアップグレードを実行できます。これにアプローチする方法はたくさんあります。おそらく複数の FQDN を使用します。したがってserver1.example.comserver2.example.comそれぞれが別のサーバー (理想的には別のデータ センター内) を指しています。また、これらのサーバーの DNS エントリの TTL を非常に低くして、サーバーがダウンし始めた場合にサーバーを新しい IP に交換できるようにします。

次に、クライアント アプリで、2 つのサーバー間でラウンド ロビンを行うか、メイン サーバーを使用してもう一方をバックアップとして機能させることができます。

そうは言っても、このようなものを設定するときに多くの人が忘れているのはテストです。1 台のサーバーのダウン、両方のサーバーのダウン、DNS の切り替え、および考えられるその他の順列をテストして、冗長ソリューションが機能し、スケーラブルであり、他の問題が発生しないことを確認する必要があります。

于 2013-01-09T17:52:47.470 に答える
1

私は 2 つの提案があります: 1. Web サービス メソッドのメソッドを呼び出し、例外で処理します。2. セクションから動的 URL を取得<applicationSettings>し、httprequest を実行して URL が有効かどうかを確認します。

ソリューション 1 の例:

[WebMethod]
public DateTime GetCurrentServerTime()
{
     return System.DateTime.UtcNow.ToString("yyyyMMddZHHmmss");
}

そしてあなたのアプリケーションで:

catch (System.Net.WebException ex)
{

messgabebox.show( "Your Web Service not available");
}

応答に約10秒かかります....

ソリューション 2 の例:

HttpWebRequest objRequest = (System.Net.HttpWebRequest)HttpWebRequest.Create(strWebServiceUrl);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)objRequest.GetResponse();

if (myHttpWebResponse.StatusCode != HttpStatusCode.OK)
{

DisplayMessage("Your Web Service not available" + "\r" + "Please try after some time");

return;
}

これは、Webサービスの可用性を確認するためのより良い方法だと思います..

于 2013-01-09T18:08:07.127 に答える