WCF揭秘——共享数据契约
2021-05-01 00:21
465 查看
WCF揭秘——共享数据契约
当客户端引用WCF服务时,必须为服务定义一个唯一的命名空间。在默认情况下,这个服务中所用到的类会被导入到这个命名空间内。这样,在不同的服务内引用同一个数据契约时就会遇到一个问题:在客户端,同一个数据契约被导入到在不同的命名空间中,无法实现转换。从Visual Studio 2008开始,系统为客户提供了“共享数据契约”这一功能。首先把需要共享的数据契约包含在一个程序集中,生成一个Model.dll文件。在客户端引用这一程序集,在添加服务引用时,选择"高级"—>"重新使用引用的程序集中的类型(A)"—>"重新使用所引用的指定程序集中的类型(S)"
当客户端引用WCF服务时,必须为服务定义一个唯一的命名空间。在默认情况下,这个服务中所用到的类会被导入到这个命名空间内。这样,在不同的服务内引用同一个数据契约时就会遇到一个问题:在客户端,同一个数据契约被导入到不同的命名空间中,无法实现转换。
在以下例子中,PersonService与ContractService同时包括对Person数据契约的引用,但通过PersonService获取到的Person对象,无法作为ContractService中的参数,因为在客户端,它们被引用到不同的命名空间之中,被视为不同的两个类。
1: [ServiceContract]
2: public interface IPersonService
3: {
4: [OperationContract]
5: Person GetPerson();
6: }
7:
8: public class PersonService : IPersonService
9: {
10: public Person GetPerson()
11: {
12: Person person = new Person();
13: person.ID = 0;
14: person.Name = "Leslie";
15: person.Age = 34;
16: return person;
17: }
18: }
19:
20: [ServiceContract]
21: public interface IContractService
22: {
23: [OperationContract]
24: Contract GetContractByPerson(Person person);
25: }
26:
27: public class ContractService : IContractService
28: {
29: public Contract GetContractByPerson(Person person)
30: {
31: Contract contract=ContractManager.GetContractByPerson(person);
32: .....
33: return contract;
34: }
35: }
36:
从Visual Studio 2008开始,系统为客户提供了“共享数据契约”这一功能。首先把需要共享的数据契约包含在一个程序集中,生成一个Model.dll文件。在客户端引用这一程序集,在添加服务引用时,选择"高级"—>"重新使用引用的程序集中的类型(R)"—>"重新使用所引用的指定程序集中的类型(S)",然后选择Model。这样,在客户端就会同时使用Model.dll中的Person对象。
相关文章推荐
- 使用泛型, 写一个为任意类型的动态数组添加元素的方法
- 准备理一下菜单和工具栏相关的组件
- 发现 TSplitter 在嵌套时不好用, 索性写了个替代品
- Action 相关组件
- WF工作流与Web服务的相互调用 —— WF与WCF互相调用(利用ReceiveActivity把WF发布为WCF)
- WF工作流与Web服务的相互调用 —— 以InvokeWebServiceActivity在Workflow工作流调用Web服务
- WF工作流与Web服务的相互调用 —— 通过Web服务调用Workflow工作流(开发持久化工作流)
- WF工作流与Web服务的相互调用 —— 通过Web服务调用Workflow工作流(基础实例)
- 让自己的列表类支持遍历
- 善用泛型数组
- WCF揭秘——可靠性会话功能
- ActionScript 3.0 记要(2): 类与接口
- 理解浮点数的储存规则
- 运维安全应该怎么做?
- 通过消息跨进程发送与接收 TCopyDataStruct 数据 - 回复 "skymesh"
- 使用多窗体时, 关于节约内存和加快启动速度的思考与尝试
- 从哪查找当前程序所有可用的环境变量?
- 关于 "高位" 与 "低位" - 回复 "Lovemit" 的问题
- 关于 OnMouseWheelDown、OnMouseWheelUp 等事件的简单例子 - 回复
- 如何用弹出窗口显示进度 - 回复