如何在OperationResult中包装EndPoint的所有结果?

时间:2010-12-29 17:25:35

标签: wcf

我想用我的应用程序中的一个Wcf服务包装每个结果,例如

public class OperationResult{
  public string Status;
  public string Data;
}

即使我的合同看起来像

[ServiceContract]
internal interface ITest
{
    [OperationContract,
     WebGet(
         RequestFormat = WebMessageFormat.Json,
         ResponseFormat = WebMessageFormat.Json)]
    MyDc EchoDc(MyDc input);
}

根据我的阅读,潜在的可扩展性点是IServiceBehavior,IEndpointBehavior,IContractBehavior,IOperationBehavior。

有什么想法可以勾勒出我的包装魔法吗?

2 个答案:

答案 0 :(得分:1)

看看@我的回答:

How to customize the process employed by WCF when serializing contract method arguments?

在那里提到了如何在返回时将一种类型的对象替换为另一种类型。

答案 1 :(得分:0)

我认为通过WCF框架上的扩展点无法做到这一点,因为您要做的就是更改合同。

合同是一个c#接口,供您的客户使用。

您必须编写一个自己的代理类供您的客户使用,您可以将操作结果映射到您喜欢的任何内容:

class ServiceProxy : ClientBase<YourServiceInterface>
{

    public OperationResult EchoDc(MyDs input)
    {
        MyDc result = Channel.EchoDc(input);
        return new OperationResult( ... // map your operation result here))
    }
}