FaultException和自定义异常WCF

FaultException和自定义异常WCF,wcf,exception,exception-handling,custom-exceptions,faultexception,Wcf,Exception,Exception Handling,Custom Exceptions,Faultexception,我有一个关于如何将自定义异常作为FaultException发送的问题。当我使用ArgumentException之类的系统异常时,它可以工作,但如果我将其更改为自定义异常“TestException”,它就会失败。当我尝试添加服务引用时,无法获取其配置 有效: [OperationContract] [FaultContract(typeof(ArgumentException))] [TransportChannel TestMethod (); public Void TestMeth

我有一个关于如何将自定义异常作为FaultException发送的问题。当我使用ArgumentException之类的系统异常时,它可以工作,但如果我将其更改为自定义异常“TestException”,它就会失败。当我尝试添加服务引用时,无法获取其配置

有效:

[OperationContract]
[FaultContract(typeof(ArgumentException))]
[TransportChannel TestMethod ();


public Void TestMethod()
{
            throw new FaultException<ArgumentException>(new ArgumentException("test"), new FaultReason("test"));
}
[OperationContract]
[FaultContract(typeof(TestException))]
[TransportChannel TestMethod ();


public Void TestMethod()
{
            throw new FaultException<TestException>(new TestException("test"), new FaultReason("test"));
}
[Serializable()]
public class TestException: Exception
{
    public TestException () : base() { }
    public TestException (string message) : base(message) { }
    public TestException (string message, Exception innerException) : base(message, innerException) { }
    public TestException (System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
}
我想我必须在自定义对象上添加一个DataContract,但我不明白为什么它不能像现在这样工作,因为ArgumentException可以工作。有人能启发我吗


感谢您的帮助:)

您确实需要按照本页所述使用[DataContract]对其进行标记:


我假设(但不确定)ArgumentException有效,因为它在线路的两侧都是已知的(假设您在每一侧都使用.NET)。如果不将异常声明为DataContract,DataContractSerializer将无法对其进行正确描述和序列化/反序列化。

您当然需要将其标记为DataContract。它是一个自定义类型,另一方(您的客户机)不知道

奇怪。我遇到了一个类似的问题,并且在不向自定义异常添加
[DataContract]
属性的情况下使其正常工作。我只是缺少使用
SerializationInfo
SerializationContext
的构造函数。添加那个构造函数对我很有效。@JeffBridgman你的意思可能是
序列化。StreamingContext
,而不是
SerializationContext
@Teejay,正确。我输入了错误的内容。这篇文章似乎暗示你可以将其标记为
[Serializable]
和[
DataContract
]。我个人在浏览器中导航到
.svc
页面时出错,抱怨
类型“TestException”无法ISerializable且具有DataContractAttribute属性