我想拦截客户端的WCF消息。我不能使用任何MessageInspector,因为我想实现客户端WCF缓存。如果请求之前已被缓存,则响应应来自缓存,否则请求将转发到服务。
当我使用netTcpBinding和netNamedPipeBinding时,实现IRequestChannel的“简单”方式是不可能的。我需要实现IDuplexSessionChannel。现在,我正在寻找一个如何拦截和替换消息的工作示例。
但为什么这很重要?
理论上,WCF服务与可能通过网络进行的所有其他调用一样,应该具有粗粒度接口。原因很明显:WCF具有大量功能来保护连接,实现可靠的混乱,确保身份验证,启用事务(......续......)。显然,这不是免费的。
在实践中,我们遇到了来自该规则的“exeptions”。在一种服务方法中称为thousend次数的服务以及其他违反最佳做法的行为。当然,处理这种情况的最佳方法是重新设计服务。不幸的是,这很少发生(你说出原因......)。
这就是缓存发挥作用的地方。基本上,有两种方法可以做到这一点:
实施“透明”解决方案,适用于所有WCF服务,无需任何修改
由于显而易见的原因,第二种解决方案似乎更有希望同样,有两种选择:
第二种解决方案要复杂得多,因为您需要一个通道工厂(和/或一个监听器)以及通道本身的实现。该频道可以是IRequestChannel或IDuplexSessionChannel。同样,您将在Web上找到第一种类型的工作解决方案,但这自然不适用于使用IDuplexSessionChannel的netTcpBining或netNamedPipeBinding。也就是说,为什么我要寻找一个说明如何做到正确的样本。
只是给人一种好处的印象:一种解决方案,具有长期运行的服务方法,执行时间是(该服务中其他服务的大约150000次调用):
没有。在那个szenario中,呼叫从150000下降到大约40000。但是,我的客户端缓存解决方案不适用于双工通道和其他特殊通信类型。因此,我正在寻找一个样本。
任何帮助将不胜感激。