我會做這樣的事情
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,直到它成功執行。
不錯,打敗了我剛剛刪除的示例:) – RSolberg 2009-04-24 21:41:10