首先,我是一名学生,一般来说是 WCF 和 C# 的新手。我试图演示在发生键入的 WCF FaultException 时返回给客户端的响应。我有一个像这样定义的类型化异常:
[DataContract]
public class CustomFault {
[DataMember]
public string cause;
[DataMember]
public string additionalInfo1;
[DataMember]
public string additionalInfo2;
public CustomFault(string cause, string additionalInfo1, string additionalInfo2) {
this.cause = cause;
this.additionalInfo1 = additionalInfo1;
this.additionalInfo2 = additionalInfo2;
}
public override string ToString() {
return string.Format("\ncause: {0}\nadditionalInfo1: {1}\nadditionalInfo2: {2}\n", this.cause, this.additionalInfo1, this.additionalInfo2);
}
}
而且我有一个服务,它FaultException<CustomFault>
在使用此行调用时简单地抛出一个:
throw new FaultException<CustomFault>(new CustomFault("Specified cause", "additional info 1", "additional info 2"));
我有一个测试客户端,它调用服务方法,捕获异常并在消息框中打印异常:
try {
exampleServiceClient.causeTypedFaultException();
}
catch (FaultException<CustomFault> faultException) {
MessageBox.Show(faultException.ToString());
}
我的问题是结果不包括CustomFault
细节(即cause
,additionalInfo1
或additionalInfo2
字段),尽管客户端成功接收到它们(调试时可见)。我不知道为什么,因为我已经覆盖ToString
打印这些字段。我知道我可以单独访问这些字段,但我想知道为什么这种方法不起作用。
我真的很感谢任何人可以提供的任何帮助。
编辑:结果只包含这个:
The creator of this fault did not specify a reason. (FaultDetail is equal to CustomFault).
编辑2:服务方法定义:
[OperationContract]
[FaultContract(typeof(CustomFault))]
void causeTypedFaultException();