首页 文章

在WCF中公开现有业务对象

提问于
浏览
2

我知道在这个问题上有类似的问题,但我并不完全确定他们是在解决同样的问题 . 所以要清楚......

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

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

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

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

这是一个好模式吗?

2 回答

  • 1

    这听起来不错,但改装序列化往往比起初看起来更麻烦 . 我建议您将一些轻量级数据 Contract 构建到服务层中,然后构建一个位于服务层和业务层之间的小层,以将数据 Contract 转换为业务对象,反之亦然 .

  • 5

    假设您的业务对象可以序列化(具有属性Serializable),一种方法可能是创建DataContainer对象,这将是您的数据协定 . 此对象将用于您的CRUD方法 .

    例如,您的界面可能是Update(DataContainer obj)Insert(DataContainer obj)

    等等

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

相关问题