在WCF中公开现有业务对象

在WCF中公开现有业务对象,wcf,Wcf,我知道在这个话题上也有类似的问题,但我不能完全肯定他们解决的是同一个问题。所以我要说清楚 我有一个现有的类库,它具有用于类型、业务逻辑和数据访问的名称空间。逻辑和数据访问命名空间中的类是静态的,具有基本的crud方法,可以用数据填充类型实例,或者获取已满的类型实例,并在数据库中进行插入或更新 现在,除了直接引用这个库的现有应用程序之外,我还想创建一个WCF服务,以便其他应用程序可以通过这种方式使用对象和方法 我看到的每个WCF教程都在服务项目中创建域对象,但我不希望在两个地方定义我的对象 因此,

我知道在这个话题上也有类似的问题,但我不能完全肯定他们解决的是同一个问题。所以我要说清楚

我有一个现有的类库,它具有用于类型、业务逻辑和数据访问的名称空间。逻辑和数据访问命名空间中的类是静态的,具有基本的crud方法,可以用数据填充类型实例,或者获取已满的类型实例,并在数据库中进行插入或更新

现在,除了直接引用这个库的现有应用程序之外,我还想创建一个WCF服务,以便其他应用程序可以通过这种方式使用对象和方法

我看到的每个WCF教程都在服务项目中创建域对象,但我不希望在两个地方定义我的对象

因此,我想我可以在现有类库中引用序列化,并将类型类标记为[DataContract],将属性标记为[DataMember]。然后,在WCF项目中,使用[OperationContract]方法创建[ServiceContract]接口,以匹配我要公开的现有库中的静态逻辑类和方法。然后,从WCF项目中,引用现有类库,并通过其中调用返回现有库类型的现有库逻辑方法的方法来实现WCF接口


这是一种好模式吗?

听起来不错,但改装序列化往往比最初看起来更麻烦。我建议您在服务层中构建一些轻量级数据契约,然后在服务层和业务层之间构建一个小层,将数据契约转换为业务对象,反之亦然。

假设您的业务对象可以序列化(使属性可序列化)一种方法是创建DataContainer对象,它将是您的数据契约。此对象将在CRUD方法中使用

例如,您的界面可以是 更新(数据容器obj) 插入(数据容器对象)

等等


然后,您将使用二进制序列化将对象打包成字节数组,并以这种方式通过WCF传递它。另一方面,您将再次使用二进制序列化对它们进行反序列化。您只需确保双方(客户机和服务器)都有具有业务对象类型的有效汇编版本。

谢谢Max。实际上我没有提到它,但我正在尝试做的一件事是不要将库发送给服务的消费者。