我会做这样的事情
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