我正在开发 WCF 服务。
OperationContracts 之一要求将复杂类型作为参数之一(具体为 System.Exception)。
当我创建一个新的异常时客户端调用代理,例如。
System.Exception toNewException = new Exception();
并发送它......它工作得很好。
但是,如果我尝试发送“System.Web.HttpUnhandledException”类型的异常。服务故障类型未知。(见下面的错误)
尝试序列化参数 http://tempuri.org/:Exception时出错。InnerException 消息是 'Type 'System.Web.HttpUnhandledException' 与数据协定名称 'HttpUnhandledException:http://schemas.datacontract.org/2004/07/System.Web' 不是预期的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。有关更多详细信息,请参阅 InnerException。
我已经研究了已知的类型属性......但到目前为止我还没有找到任何有帮助的示例或文档。
任何人都知道有关我如何能够更改我的客户端/服务器以接受/处理任何类型的异常的信息的良好来源?
为了让我的问题更详细一点......错误状态;'将任何静态未知的类型添加到已知类型的列表中'。这就是我想知道如何专门为像 system.exception 这样的复杂.net 对象做的事情。
更新
我尝试进行以下更改:
[OperationContract]
[ServiceKnownType(typeof(HttpUnhandledException))]
void LogError(Exception Exception, Boolean LogInternalFlag, int UserId, int ApplicationId, int SeverityId);
我最终得到了另一个错误!
尝试序列化参数 http://tempuri.org/:Exception时出错。InnerException 消息是 'Type 'System.Collections.ListDictionaryInternal' 与数据协定名称 'ArrayOfKeyValueOfanyTypeanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays' 不是预期的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。有关更多详细信息,请参阅 InnerException。
至少有异常的错误是有道理的......我完全不确定这意味着什么。
我还要说明一下,我确实尝试将异常序列化为 xml 并将其作为字符串传递......不幸的是,这并不像听起来那么简单,并且有很多考虑因素需要考虑到序列化异常和任何内部异常。