我正在从Silverlight客户端调用WCF服务,因此将所有调用都设置为异步。
当WCF服务返回ExceptionFault时,错误对象将填充在Completed事件处理程序的参数中...
proxy.UpdateCompleted += (o, e) =>
{
if(e.Error != null)
.... do something
}
将e.Error转换为FaultException的最佳方法是什么?
if (e.Error is FaultException<InvalidOperationFault>)
{
var fault = e.Error as FaultException<InvalidOperationFault>;
... do something
}
或
try
{
throw e.Error
}
catch(FaultException<InvalidOperationFault> fault)
{
... do something
}
或者你能提出更好的建议吗?
答案 0 :(得分:2)
我更喜欢第二个选项,如果它不为null,则抛出e.Error。这样,生成的代码的结构与同步方法调用的结构相同:
try
{
if ( e.Error != null )
throw e.Error;
// ...
}
catch ( FaultException<ValidationFault> fault ) { /* ... */ }
catch ( FaultException<MyServiceFault> fault ) { /* ... */ }
// ...
finally { /* ... * }
答案 1 :(得分:0)
这只是归结为C#
中缺少Switch on类型支持Is there a better alternative than this to 'switch on type'?