2009-04-24 48 views
1

如果服務器1失敗,我希望能夠使用服務器2,所以我有兩個Web引用,但這會導致「模糊引用」錯誤,因爲它在兩臺服務器上都是相同的服務。我在服務器1上使用Web服務如果服務器1失敗(使用C#),我如何更改爲服務器2

這是C#代碼:使用App.org.weccrc.www

; //主服務器 使用App.org.weccrc.www2; //備份服務器

有沒有一種方法來檢查服務是否可在「使用」聲明「之前server1的?

這會是一個條件語句?

,或有其它的方法來解決這個問題。提前

感謝

勞爾

回答

1

您的Web引用,URL行爲設置爲d 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 
} 

,你可以把它做這樣

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

這事將通過指定每個URL循環,並呼籲web服務。如果失敗,那麼它只會嘗試執行下一個URL,直到它成功執行。

+0

不錯,打敗了我剛剛刪除的示例:) – RSolberg 2009-04-24 21:41:10