2009-04-24 8 views
1

server1が失敗した場合にserver2を使用できるようにしたいので2つのWeb参照がありますが、両方のサーバーで同じサービスであるため、エラーが発生します。私はserver1上のWebサービスを消費しますserver1が失敗した場合(C#を使用)

これは、C#コードである:App.org.weccrc.wwwを用い

。 //メインサーバ 、App.org.weccrc.www2を使用する。 //バックアップサーバ

サービスは、「使用して」文 "の前にServer1で利用可能であるかどうかを確認する方法は?

が、これは条件文することができますか?

があるか、別のアプローチがにありあなたのWeb参照に予め

おかげ

ラウル

答えて

1

。この問題を解決するため、DへのURLの動作を設定しますynamic。生成されたWeb参照のコードには、場所を制御する設定があります。プライマリサービスが失敗したことを検出すると、Urlプロパティをフォールバックの場所に設定できます。

プライマリサービスが失敗したことを検出する方法は、もちろん、使用しているサービスによって異なります。

3

私はこの

public R CallWebservice<T,R>(T service, IEnumerable<string> urls, Func<T,R> serviceCall) 
    where T : SoapHttpClientProtocol, IDisposable 
{ 
    foreach (var url in urls) 
    { 
     try { 
      service.Url = url; 
      return serviceCall(service); 
     } catch (Exception ex) { 
      // Log Error 
      continue; 
     } finally { 
      service.Dispose(); 
     } 
    } 

    // throw exception here which means that all url's failed 
} 

ような何かをするだろうし、あなたが指定されており、Webサービスを呼び出して、各URLを通じてこの

Employee[] employees = CallWebService(
    new DownloadService(), 
    new string[] { "http://site1/service.asmx","http://site2/service.asmx" }, 
    service => service.DownloadEmployees() 
); 

この場合とループのようなものをやって、それを呼び出すことができます。失敗した場合は、正常に実行されるまで次のURLを試行します。

+0

いいえ、私は今削除した例から抜きん出てください:) – RSolberg

+0

heh、それは私にもたくさん起こります。私はちょうど利用するために私の目の前で作業コードを持っていた;) –

+0

ダレンとジョセフありがとう、両方の答えは私にとって有用だった ありがとう –