我得到了Type 'WcfServiceLibrary1.GetDataErrorException' cannot be ISerializable and have DataContractAttribute attribute.
尝试在WCF服务中添加自定义异常时。
[ServiceContract]
public interface IService1 {
[OperationContract]
[FaultContract(typeof(GetDataErrorException))]
string GetData(int value);
}
public class Service1 : IService1 {
public string GetData(int value) {
if (value.Equals(0))
throw new FaultException<GetDataError>(new GetDataError(), new FaultReason("Zero"));
return string.Format("You entered: {0}", value);
}
}
[DataContract]
public class GetDataError {
public GetDataError() { }
}
[DataContract]
public class GetDataErrorException : FaultException<GetDataError> {
public GetDataErrorException(string message) :
base(new GetDataError(), new FaultReason(message)) { }
}
为什么这不起作用?我想错过了一些简单的东西...
答案 0 :(得分:1)
你不能也不应该同时拥有两者。从你得到的例外中可以看出这一点。当框架看到2个序列化程序时,框架会看到一个模糊的状态。有关更多信息,请参阅以下博客
http://blogs.msdn.com/b/sowmy/archive/2006/05/14/597476.aspx
你的过错合同应该是
public class DataErrorException : FaultException<GetDataError>
{
public DataErrorException(string message) :
base(new GetDataError(), new FaultReason(message)) { }
}
请注意,此处唯一的更改是我删除了DataContract
属性
答案 1 :(得分:1)
我使用msdn faultexception example中的示例,这对我有用。