通过WCF在自定义类中公开成员函数
本文关键字:成员 函数 WCF 自定义 通过 | 更新日期: 2023-09-27 17:50:27
在我的服务中已经创建的三个自定义类中有一些成员函数。我的目标是在客户端使用这些自定义类来访问服务中的成员函数。如何向客户端公开这些类及其所有成员方法?
我在我的服务中创建了这三个类,并将它们标记为"DataContract",成员函数标记为"OperationContract"。我创建了一个接口,该接口将这些自定义类定义为OperationContracts,通过在单独的类上实现它们,返回每个类的对象。
不幸的是,我无法实现我的目标,因为其中两个类有一个带一些参数的构造函数,而没有构造函数的类在客户端可以访问,但我无法看到类中的成员方法。
我需要你的提示。
这可不容易。一种方法是在WCF服务器和它的客户端之间共享DataContract
装饰的类型,即在客户端项目中添加一个对服务程序集的引用,并将服务引用绑定到该程序集引用。
然而,这破坏了契约实现的独立性,因为完全相同的服务组件需要同时存在于客户端和服务器上,并且在每次更改时保持同步。
默认情况下,WCF将只在客户端和服务器之间共享合约,例如您的服务([ServiceContract]
),它们的方法([OperationContract]
)和它们操作的数据结构([DataContract]
)。
WCF是一个消息传递系统,因此所有客户机和服务器共享的数据都是XML序列化的消息格式。当您添加服务引用时,客户端代理将为每个[DataContract]
生成一个类,这些类在XML序列化格式中看起来是相同的—只有数据来回移动—没有行为(没有方法)。
[OperationContract]
属性装饰的服务方法。数据类上的方法永远不会对客户端可见——这是设计的。
如果你控制了通信的两端,并且都是基于。net的,你可以"欺骗"你的方式绕过这个限制:
- 把所有的服务和数据契约放到一个单独的类库程序集中
- 使用对该公共共享程序集的引用来创建服务
- 在执行
Add Service Reference
之前,在客户端上添加对该通用程序集的引用
它只在。net环境下工作得很好,但在适当的服务分离表象背后,它确实是一种肮脏的把戏。