3
我已經編寫了一個擴展方法用於WCF服務,它將所有的處理和異常處理邏輯保存在一個地方。該方法如下:使用擴展方法調用WCF服務
public static TResult CallMethod<TChannel, TResult>(
this ClientBase<TChannel> proxy,
Func<TResult> func) where TChannel : class
{
proxy.ThrowIfNull("proxy");
func.ThrowIfNull("func");
try
{
// set client credentials
return func();
}
finally
{
if (proxy != null)
{
try
{
if (proxy.State != CommunicationState.Faulted)
{
proxy.Close();
}
else
{
proxy.Abort();
}
}
catch (CommunicationException)
{
proxy.Abort();
}
catch (TimeoutException)
{
proxy.Abort();
}
catch (Exception)
{
proxy.Abort();
throw;
}
}
}
}
的方法將被用於這樣的:
public int CreateBusinessObject(BusinessObject item)
{
MyServiceClient proxy = new MyServiceClient();
return proxy.CallMethod(() => proxy.CreateBusinessObject(item));
}
我的問題還真是,這是否會爲它創建服務代理的靜態方法更好呢?我對目前的實施情況略有擔心。代理的構建是否應該在try/catch中?我目前的理解是,如果構造函數失敗,則無論如何都不能處理。
好點。我應該知道做這樣的事情。謝謝。 – 2010-10-20 09:43:34