我可以在它转移之前提取一个通过WCF的对象,以便我可以先操作它

时间:2012-11-30 11:47:04

标签: c# .net wcf service poco

所以我通过WCF发送实体。我想做的是在他们过去之前有机会以任何我想要的方式改变实体。我不必在WCF中这样做,但我没有看到另一个地方去做,因为我想要一个地方去做。

如果有人有其他方法可以做到这一点,请提供建议:)

我有通常的DAL,域和服务层。他们都有共同点。

3 个答案:

答案 0 :(得分:2)

我认为你在谈论Message Inspectors

  

消息检查器是可以在其中使用的可扩展性对象   服务模型的客户端运行时和以编程方式调度运行时   或者通过配置,可以检查和更改消息   他们被收到或在被送到之前。

     

此示例实现了基本的客户端和服务消息验证   根据一组验证传入消息的机制   可配置的XML Schema文档。请注意,此示例没有   验证每个操作的消息。这是故意的   简化。

另请查看IParameterInspector,您可以在此处理客户端和服务器端的所有输入/输出参数

答案 1 :(得分:2)

我不确定我是否理解你的要求,但我会试一试。

我认为您可能正在寻找Data Transfer Objects(DTO)。您可以将实体所需的所有数据放入DTO,然后再将其发送到服务。然后,该服务处理所包含的数据,并将另一个DTO发送回您的客户端。

通过这种方式,您可以完全控制DTO的结构以及服务和客户真正需要的数据类型。

答案 2 :(得分:1)

扩展Jen H的答案:

而不是检查消息并处理反序列化的开销 已经序列化的结果,您可以在从数据库中检索结果之后以及将它们返回到客户端之前执行自定义逻辑。一种方法如下所示

public interface IDataTransferObject
{
        void CustomizeMeSomehow();
}

[DataContract]
public class MyDataTransferObject : IDataTransferObject
{
    public void CustomizeMeSomehow()
    {
          //Your custom logic here..
    }
}

public class MyService
{
      public List<MyDataTransferObject> GetObjects()
      {
          List<MyDataTransferObjects> items = Repository.RetrieveResults();

          foreach (var item in items)
               item.CustomizeMeSomehow();

          return items;
      }  
}