我有一个双向连接的Stream
的两端,我想通过它进行一些通信。流背后的底层实现并不重要,我希望在Stream
级别工作……
与其为流实现我自己的通信协议,我希望利用所有现有的WCF优点,用一个双向(请求/响应+回调) WCF通信通道来包装现有的流。
我的问题是,我该如何着手做这件事...?
更新:
我已经走上了实现自定义传输的道路。我已经把它弄好了,但我还是不太满意...
我实现了一个用于包装流的绑定,以及适当的IChannelFactory
和IChannelListener
,以及一个用于创建通道工厂的IDuplexSessionChannel
元素。现在,我只传递连接的流,并最终在创建传输通道时将它们传递到传输通道中。
因此,我可以创建客户端代理来通过流访问服务,如下所示:
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被设置为通过IChannelListener
使用ServiceHost
创建通道的服务器端。在我的例子中,我已经有了一个连接的流,并且我将无法侦听更多的传入连接。我可以解决这个问题,但我不希望使用ServiceHost
来创建通道的服务器端,因为我最终使用了许多晦涩难懂的样板和技巧来使其正常工作。
问题
因此,我正在寻找一种更好的方法来获取IDuplexSessionChannels,并将它们包装到服务器和客户端的通道代理中。
或者可能是不需要IChannelListener
的不同ServiceHost实现。
真的,这里的问题是我不想要一个单一的服务器,多个客户端的安排,我有一个1对1的关系,我的WCF服务和客户端。有没有正确的方法来实例化其中的一个?
换句话说,我希望在不使用ServiceHost的情况下创建服务器端服务实例。
在这个阶段,任何建议都将不胜感激。
https://stackoverflow.com/questions/9514199
复制相似问题