我试图从我的 WCF 服务中将我自己的自定义异常抛出到 FaultException 中,并在我的 WCF 客户端中捕获它。但是,在客户端,异常被捕获为非通用 FaultException,并且我的自定义异常的详细信息丢失了。
我的自定义例外是:
[Serializable] public class MyCustomException : ApplicationException
{ ... }
这是我扔它的方法:
throw new FaultException<MyCustomException>(new MyCustomException("foo bar!"));
(请注意,我确实在界面中的方法上放置了 [FaultContract(typeof(MyCustomException))])
以下是我尝试在我的客户中捕捉它的方法:
...
catch (FaultException<MyCustomException> mcex)
{
Console.WriteLine(mcex);
}
catch (FaultException fex)
{
Console.WriteLine(fex);
}
我的目标是在上面的第一个 catch 子句中捕获异常,但它最终在第二个 catch 子句中被捕获。
奇怪的是,如果我将 MyCustomException 替换为 ApplicationException,那么 FaultException 确实会被正确捕获。
我猜问题是 MyCustomException 被序列化为可序列化(而不是通过 DataContractSerializer),并且可能我缺少一些对 WCF 的附加指令。ServiceKnownType 属性行中的内容?(虽然我试过了,但无济于事)。