C# Wcf:所有的回复都到哪里去了?
我有一些REST web服务实现如下: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
[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
方法中的消息
对象格式时遇到了一些困难。它是如何结束的,我不能在消息
格式之前一步操作我的对象吗?