Wcf:所有回复都在哪里?

时间:2018-04-05 09:02:43

标签: c# rest wcf

我有一些像这样实现的REST Web服务:

[ServiceContract]
public interface IRESTService
{
    [WebGet(UriTemplate = "GetEveryone", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    EveryoneDTO GetEveryone();
}

public class RESTService : IRESTService
{
    public EveryoneDTO GetEveryone()
    {
        // [...] Some processing
        return everyone;
    }
}

我的everyone对象在哪里?我的意思是,它必须发生一些事情来将对象转换为JSON并发送它们。我的诽谤不再引导我。

我对此感兴趣,因为,我想说,我想处理我发回的每个对象中包含的每个字符串(可能是出于编码目的),我将如何/在哪里实现拦截每个对象并在发送之前能够轻松改变它们的中间件?

2 个答案:

答案 0 :(得分:1)

一个好的解决方案是实现自定义消息检查器 您可以实现两个接口,具体取决于客户端或服务器端:

客户端为

IClientMessageInspector,服务器为IDispatchMessageInspector。您可以在同一个类和程序集上实现它们并使用更方便的方法,因为消息检查器是扩展,您可以配置(例如,Web.config)您想要使用它。

IDispatchMessageInspector实现了AfterReceiveRequestBeforeSendReply方法,因此您可以在收到请求时和发送回复之前拦截邮件,这对您的方案非常有用。

这是MSDN message-inspectors纪录

一个简单的实施例子:

    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
        request = buffer.CreateMessage();
        var m = buffer.CreateMessage().ToString();
        return null;
    }

请注意,您必须复制原始邮件,以便提取XML并将对象转换为pourpose(日志,更改等)

答案 1 :(得分:0)

如果我理解得很好,您希望在将WCF数据输出发送给您的客户之前拦截它。

有多种方法可以做到这一点,下面链接中的内容就是其中之一:

https://www.codeguru.com/csharp/.net/net_wcf/learn-to-create-interceptors-in-wcf-services.htm

希望有所帮助