【发布时间】:2015-06-30 12:25:33
【问题描述】:
我正在尝试以最通用的方式通过 WCF 发送异常。这是我得到的:
[ServiceContract]
interface IContract
{
[OperationContract]
void Foo();
}
class ContractImplementation: IContract
{
public void Foo()
{
try
{
Bar();
}
catch (Exception ex)
{
throw new FaultException<Exception>(ex, ex.Message);
}
}
}
实际上来自Bar 的异常是:
[Serializable]
class MyException : Exception
{
// serialization constructors
}
我在服务器端 WCF 日志记录中看到的错误是:
键入带有数据的“MyException” 合同名称 '我的异常:http://schemas.datacontract.org/2004/07/MyException' 预计不会。考虑使用 DataContractResolver 或添加任何 已知类型列表中静态未知的类型 - 例如, 通过使用 KnownTypeAttribute 属性或将它们添加到 传递给 DataContractSerializer 的已知类型列表。
到目前为止我已经尝试过:
[ServiceKnownType(typeof(MyException))]
[ServiceContract]
interface IContract
{
[FaultContract(typeof(MyException))]
[OperationContract]
void Foo();
}
但没有运气。
【问题讨论】:
-
可能是因为你抛出了新的 FaultException
(ex, ex.Message);而不是“抛出新的 FaultException (ex, ex.Message);” ?另外,FaultException 的 TDetail 不一定是异常 -
@hazzik:我将实际异常放在详细信息中,因为我想在客户端重新抛出它。