Mar*_*ark 17 connection wcf custom-binding
我有双向连接的两端Stream
,我想做一些沟通.流后面的底层实现并不重要,我想在这个Stream
层面上工作......
我不想为流实现我自己的通信协议,而是希望使用所有现有的WCF优势来使用双向(请求/响应+回调)WCF通信通道来包装现有流.
我的问题是,我怎么能这样做......?
更新:
我走了实现自定义传输的道路.我有这个工作,但我仍然不是很满意它...
我已经实现了一个IDuplexSessionChannel
包装流,以及适当的IChannelFactory
和IChannelListener
用于创建通道工厂的绑定元素.现在,我只是通过连接的流,并最终在创建它时将它们传递到传输通道.
所以,我可以通过流创建客户端代理来访问服务,如下所示:
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();
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,似乎WCF设置为使用a ServiceHost
创建通道的服务器端,通过IChannelListener
.在我的情况下,我已经有一个连接流,我将无法再侦听任何传入的连接.我可以解决这个问题,但我宁愿不使用a ServiceHost
来创建频道的服务器端,因为我最终得到了很多模糊的样板和黑客来使它工作.
问题
因此,我正在寻找更好的方法来获取IDuplexSessionChannels,并将它们包装到服务器端和客户端的Channel代理中.
或者可能是不需要的不同ServiceHost实现IChannelListener
.
真的,这里的问题是我不想要单个服务器,多个客户端安排,我的WCF服务和客户端之间有1-1关系.有没有正确的方法来实例化其中一个?
换句话说,我想在不使用ServiceHost的情况下创建服务器端服务实例.
在此阶段,任何建议都将受到赞赏.
小智 1
在两端使用客户端。不过,您需要仔细定义您的合同。如果流的任一端都有 ClientA 和 ClientB,则当 ClientA 发送请求时,ClientB 将期望它看起来像它所看到的那样,因为它定义了回调契约,反之亦然。
归档时间: |
|
查看次数: |
637 次 |
最近记录: |