【发布时间】:2011-01-16 04:50:18
【问题描述】:
在我的 WCF 客户端类中,我正在处理 Faulted() 事件,因此如果远程服务抛出异常并导致通道出现故障,我至少仍然可以正常关闭它。这是我的代码:
protected void RemoteDataRetriever_Faulted(object sender, EventArgs e)
{
(sender as ICommunicationObject).Abort();
this.Dispose();
throw new ChannelTerminatedException("The remote service threw an unhandled exception and as a result the channel has been closed.");
}
所以我期望客户端可以处理我手动抛出的ChannelTerminatedException 并向用户发送消息等。相反,我的异常被包裹在System.ServiceModel.Diagnostics.CallbackException 中。好的。除了这里有一个问题:ServiceModel 库中不存在此 CallbackException,而且我似乎无法处理它,除非作为通用的 Exception,这对我的单元测试没有好处。这到底是怎么回事?我可以以某种方式禁用它并抛出我最初想要的异常吗?
【问题讨论】:
-
既然你自己抛出异常,你可以使用另一个没有被包装的异常吗?我在想一些不会暴露你在它下面使用 WCF 的事实......
-
没有骰子。我将 ChannelTerminatedException 更改为 StackOverflowException ;-) 它仍然被包裹在那个烦人的 CallbackException 中(我抛出的最终是内部异常)。然后它给出了令人讨厌的消息:“用户回调引发了异常。检查异常堆栈和内部异常以确定失败的回调。”是的,我知道回调引发了异常!是我扔的!我将做更多的研究,看看是否有一个 WCF 标志/参数可以用来禁用此行为。
标签: .net wcf exception exception-handling faulted