【问题标题】:Hook into WCF service before deserialization of client request and after serialization of response在客户端请求反序列化之前和响应序列化之后挂钩到 WCF 服务
【发布时间】:2014-08-19 02:41:32
【问题描述】:

有没有办法挂钩到客户端对 WCF 服务的每次调用

  1. 一旦在服务器端发现客户端请求(即在请求反序列化之前)
  2. 响应序列化完成后

所以例如这些点可以添加到延迟测量中。如果这是特定于 net.tcp 的,那没关系,这是我们正在使用的。

我想添加一个IDispatchMessageInspector 可以让我在请求反序列化之前加入(尽管在创建Message object 之后,我什至想在此之前加入) ,但不是在响应序列化之后

【问题讨论】:

  • 这是您想要的仅限开发环境的东西吗?还是生产要求?
  • @TomRedfern 它也应该在 PROD 中工作

标签: .net wcf hook net.tcp


【解决方案1】:

为了挂钩在反序列化请求之前,我包装了MessageEncoder(为此我还必须包装MessageEncoderFactoryMessageEncodingBindingElement

然后我可以挂钩MessageEncoder.ReadMessage() 重载。


为了在响应序列化后加入,我包装了IOutputChannel(为此我还必须包装IChannelListenerTcpTransportBindingElement),

然后我可以连接到IOutputChannel.Send()/IOutputChannelEndSend() 重载。

这是我得到的最接近电线的地方,而且对我来说足够接近。

【讨论】:

  • 请求反序列化后是否有一个集中的地方可以挂接?
【解决方案2】:

如果您唯一需要的是在调用给定服务时捕获正在发送/接收的消息,您可以使用以下链接中的建议:

https://msdn.microsoft.com/en-us/library/ms735120(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/aa702726(v=vs.110).aspx

这将允许您以 Xml 格式将所有发送和接收的消息捕获到磁盘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多