根据输入/输出更改WCF web服务上的DataMember属性

本文关键字:服务 web 属性 DataMember WCF 输入 输出 | 更新日期: 2023-09-27 18:25:37

场景:数据模型中的一个实体与各种信息一起传递到WCF Web服务中,保存到数据库中,然后返回,对象中完全填充了其他信息。

   public class Request
   {
    public virtual Guid RequestID { get; set; }
    public virtual string RequestType { get; set; }
    public virtual System.DateTime CreatedDate { get; set; }
    //More properties here populated from DB
   }
   [OperationContract]
   Request CreateRequest(Request input);

在本例中,RequestID和CreatedDate仅在记录插入数据库时填充,因此在初始请求期间不应可见。但是,当返回对象时,它们应该是可见的。

我们目前采用的方法是在我们的web服务实现项目中创建两个类(RequestInput和RequestOutput),这两个类继承自实体。然后,我们将在需要的各种属性上添加[DataMember]属性,在应该忽略的属性上添加[IgnoreDataMember]属性。

这是正确的方法吗?

根据输入/输出更改WCF web服务上的DataMember属性

我不会说这是一种正确或不正确的方式。但更常见的是使用类似的名称

[DataContract]
Request{...}

[DataContract]
Response{...}

理想情况下,请求和响应应该与您在客户端和服务器中使用的模型表示解耦,即您有一个facade或适配器,可以将它们从服务代码映射到您的模型。

这与我的做法大致相同——但这是非常主观的,取决于实体的大小等——你可能想以某种方式使用自动映射器。

// higher level code
var entity = new Entity { properties we know before call };
// pass down to service layer 
var response = service.CreateRequest(new Request { Prop1 = entity.Prop1... } );
entity.RequestID = response.RequestId;
entity.CreatedDate = response.CreatedDate;