我正在创建一个WCF服务并通过抛出WebFaultException<MyResultClass>
来处理错误。 (MyResultClass)是我项目中的一个类:
[DataContract]
public class MyResultClass
{
[DataMember(IsRequired = false)]
public int Code;
[DataMember(IsRequired = false)]
public string Description;
public MyResultClass()
{
}
}
问题是WCF服务没有序列化这个类。
答案 0 :(得分:2)
首先(正如其他人提到的)你应该使用属性。
[DataContract]
public class MyResultClass
{
[DataMember]
public int Code { set; get; }
[DataMember]
public string Description { set; get; }
}
此外,您需要在界面中指定FaultContract
。否则客户无法知道会发生什么。由于WebFaultException
继承自FaultException
,因此您无需指定它。
[ServiceContract]
public interface IService:
{
[OperationContract]
[FaultContract(typeof(MyResultClass))]
void DoStuff();
}
你的实施:
public class Service : IService
{
public void DoStuff()
{
var detail = new MyResultClass
{
Code = 400,
Description = "foo"
};
throw new WebFaultException<MyResultClass>(detail, HttpStatusCode.BadRequest);
}
}
和你的客户:
try
{
// Call your WCF service here...
}
catch (FaultException<MyResultClass> e)
{
MyResultClass detail = e.Detail;
// Do stuff with detail
}
catch (Exception e)
{
// Some other error
}
答案 1 :(得分:0)
请将您的课程更改为此并尝试:
[DataContract]
public class MyResultClass
{
[DataMember]
public int Code { set; get; }
[DataMember]
public string Description { set; get; }
}