Tag: 故障

如何处理WCF故障exception

我试图在开源客户端应用程序中添加有关SOAP错误的更多信息。 客户端设置为在遇到任何SOAP故障时调用“HandleFault”。 Handle Fault方法如下所示: public static void HandleFault(Message message) { MessageFault fault = MessageFault.CreateFault(message, Int32.MaxValue); throw System.ServiceModel.FaultException.CreateFault(fault, typeof(PermissionDeniedFault), typeof(EndpointUnavailable), typeof(InvalidRepresentation), typeof(UnwillingToPerformFault), typeof(CannotProcessFilter), typeof(AnonymousInteractionRequiredFault) ); } 以下是SOAP Fault的一部分,当我尝试执行诸如从客户端将电话号码更改为无效格式之类的操作时,将其作为“消息”传递。 Sender a:InvalidRepresentation The request message contains errors that prevent processing the request. OfficePhone (123)456-7890 ValueViolatesRegularExpression The specified attribute value does not satisfy the regular expression. 11042dda-3ce9-4563-b59e-d1c1355819a4 每当遇到那个Fault时,客户端只返回“请求消息包含阻止处理请求的错误。”,我想在客户端重新抛出exception之前包含“ AttributeRepresentationFailure […]

指定自定义序列化程序时,未反序列化故障详细信息

我在我的应用程序中使用自定义XmlObjectSerializer 。 为此,我用MyOperationBehavior替换XmlSerializerOperationBehavior ,它看起来像这样: public class MyOperationBehavior : DataContractSerializerOperationBehavior { public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList knownTypes) { return new MySerializer(); } public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList knownTypes) { return new MySerializer(); } } 问题在于,通过这样做,任何故障都被反序列化为非genericsFaultException而不是FaultException并且我无法访问故障的详细信息。 在做了一些调查之后,我发现问题的根源在于,通过inheritanceDataContractSerializerOperationBehavior ,.NET在内部将FaultFormatter设置为DataContractSerializerFaultFormatter ,它不知道如何反序列化故障的细节(而不是XmlSerializerFaultFormatter )。 问题肯定不在MySerializer ,因为在它到达我的ReadObject方法之前抛出了FaultException 。 所以我的问题是我该怎么做才能使WCF正确反序列化我的错误细节? 我试着找一种自己设置FaultFormatter的方法,但没有运气,特别是因为所有这些格式化程序都是内部的。