我有一个网站,我需要对 WCF 服务进行异步调用。我想将每个调用包装在一个 try-catch 块中,以便处理 TimeoutExceptions 和 CommunicationExceptions。
但是,我不想每次调用我的服务时都复制粘贴完全相同的 try-catch 块。有什么方法可以使用委托只编写一次 try-catch 块吗?我还想捕获异常消息。
我想这样称呼它:
// This method returns void
TryCatchHelper(x => x.WCFMethod1(param1, param2));
// This method has a return value but no params
var returnValue = TryCatchHelper(x => x.WCFMethod2());
编辑:这是我的代码现在的样子:
User GetUser(int Id)
{
User returnUser = null;
try
{
// Open WCF channel, etc.
returnUser = myWCFClient.GetUser(Id);
}
catch (TimeoutException exception)
{
Log(exception.Message);
// Abort WCF factory
}
catch (CommunicationException exception)
{
Log(exception.Message);
// Abort WCF factory
}
return returnUser;
}
我不想在我在存储库中设置的每个方法中都使用相同的 try-catch 块。我尝试做这样的事情,但它在参数上给了我一个错误。我知道我没有正确使用它们,但我需要一种方法来定义一个可以代表我想要进行的所有 WCF 方法调用的委托:
delegate object WCFAction(params object[] parameters);
object DoWCFAction(WCFAction action, params object[] parameters)
{
object returnValue = null;
try
{
// Open WCF channel, etc.
returnValue = action(parameters);
}
catch (TimeoutException exception)
{
Log(exception.Message);
// Abort WCF factory
}
catch (CommunicationException exception)
{
Log(exception.Message);
// Abort WCF factory
}
return returnValue;
}
void MainMethod()
{
// Compiler error
User user = DoWCFAction(GetUser, 1);
}