我正在学习 WCF,今天面临的挑战之一是实现此设计:
[DataContract]
public class MyOwnFaultException : FaultException<MyResult>
{
public MyOwnFaultException(MyResult result) : base(result) {}
}
[DataContract]
public class MyResult
{
readonly DefinedResults dres;
public MyResult(DefinedResults res) {
dres = res;
}
[DataMember]
public DefinedResults DRes
{
get { return this.dres; }
//do not want to have the setter for this, but w.o it .net throws exception
}
}
[DataContract]
public enum DefinedResults
{
Success = 0,
Fail = 1,
}
服务
[OperationContract]
[FaultContract(typeof(MyOwnFaultException))]
void TestRemoteException();
因此,当我尝试创建对“错误”服务的引用时,我自然会收到“未设置 DRes 成员”异常,这是可以理解的。但是如何对用于结果指示器的值对象实现只读字段模式?
最佳答案
这是因为服务共享架构和契约,而不是类。
话虽如此,您可以通过以下方式破解它:
[DataMember]
public DefinedResults DRes
{
get { return this.dres; }
private set { /* NOOP */ }
}
关于Wcf、序列化、只读成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752053/