角色基础dataContract

时间:2011-05-10 12:34:51

标签: wcf serialization datacontract

举个例子。我有一个WCF服务与一个返回datacontract的方法。数据合同有几个数据成员,并且几个客户正在使用服务。数据合同中的少数成员具有敏感信息,不应该发送给所有客户。控制从wcf到客户端的数据流的最佳方法是什么。如果此类数据成员显示默认值,那对我来说很好。我想避免每种类型的客户端的代码,并希望使用一些配置方法。就像在配置文件中一样,我可以将所有要序列化的属性写为逗号分隔的字符串。对于那些未序列化的用户,当客户端尝试访问该属性时,是否可以将“未授权”异常传递给客户端。为什么我要求避免代码,每个数据成员本身可以计入订阅费用。可能会有很多合同,并且正在扩大。

1 个答案:

答案 0 :(得分:0)

WCF无法实现动态合同。你可以做的是拥有一个基础数据契约类,然后继承:

[DataContract]
public class MyOperationResultBase { ... }


[DataContract]
public class SpecificSchema01 : MyOperationResultBase { ... }

然后在你的服务中你可以做

[OperationContract]
public MyOperationResultBase DoMyOperation(MyOperationRequest request) { ... }

然后根据需要返回适用的派生类的实例。

显然这也意味着您的客户端必须检查返回结果的类型,并且您必须在基类中指定派生类的类型(或创建类型解析器,但如果此解决方案是以后您可以执行此操作证明适合你):

[KnownType(typeof(SpecificSchema01))]
[KnownType(typeof(SpecificSchema02))]
[KnownType(typeof(SpecificSchema03))]
[DataContract]
public class MyOperationResultBase { ... }

这是你在找什么?