我有一个双向连接的两端Stream
,我想通过它进行一些通信。流背后的底层实现并不重要,我想在这个Stream
级别上工作......
我不想为流实现我自己的通信协议,而是想使用所有现有的 WCF 优点通过双向(请求/响应 + 回调)WCF 通信通道来包装现有流。
我的问题是,我该怎么做……?
更新:
我已经走上了实现自定义传输的道路。我已经完成了这项工作,但我仍然对此并不完全满意......
我已经实现了一个IDuplexSessionChannel
包装流,以及适当的IChannelFactory
andIChannelListener
和一个用于创建通道工厂的绑定元素。现在,我只是通过连接的流,并最终在创建时将它们传递到传输通道。
因此,我可以创建客户端代理以通过流访问服务,如下所示:
var callback = new MyCallback();
var instanceContext = new InstanceContext( callback );
var pipeFactory = new DuplexChannelFactory<IMyService>( instanceContext, new StreamBinding(clientStream),
new EndpointAddress("stream://localhost/MyService"));
var serviceProxy = pipeFactory.CreateChannel();
我遇到的问题是,似乎 WCF 设置为使用 aServiceHost
创建通道的服务器端,通过IChannelListener
. 就我而言,我已经有一个连接的流,我将无法再监听任何传入的连接。我可以解决这个问题,但我宁愿不使用 aServiceHost
创建通道的服务器端,因为我最终会得到很多晦涩的样板和黑客来使其工作。
问题
因此,我正在寻找一种更好的方法来获取 IDuplexSessionChannel,并将它们包装到服务器端和客户端的 Channel 代理中。
或者可能是不需要IChannelListener
.
真的,这里的问题是我不想要一个服务器,多个客户端的安排,我的 WCF 服务和客户端之间是 1-1 的关系。是否有正确的方法来实例化其中之一?
换句话说,我想在不使用 ServiceHost 的情况下创建服务器端服务实例。
在此阶段,我们将不胜感激任何建议。