C# Wcf:所有的回复都到哪里去了?

C# Wcf:所有的回复都到哪里去了?,c#,rest,wcf,C#,Rest,Wcf,我有一些REST web服务实现如下: [ServiceContract] public interface IRESTService { [WebGet(UriTemplate = "GetEveryone", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] [OperationContract] EveryoneDTO GetEveryone(); } p

我有一些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;
    }
}
我的
每个人
对象要去哪里?我的意思是,将对象转换为JSON并发送它们必须发生一些事情。我的脱窃听不会让我走得更远


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

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

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


希望能有所帮助

一个好的解决方案是实现自定义消息检查器。
根据客户端或服务器端的不同,您可以实现两个接口:

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

IDispatchMessageInspector
实现了
AfterReceiveRequest
BeforeSendReply
方法,因此您可以在收到请求和发送回复之前截获消息,这对您的场景非常有用

这是文件

一个简单的实施示例:

    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的对象(日志、更改等)

WCF扩展性上有大量文档,包括自定义消息检查器。你真的不该错过这个。例如,看看这里,您有一个自定义的REST消息检查器。@WiktorZychla的确如此,但我在操作
BeforeSendReply
方法中的
消息
对象格式时遇到了一些困难。它是如何结束的,我不能在
消息
格式之前一步操作我的对象吗?