2009-04-24 51 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