我有一个双向连接的
与其为流实现自己的通信协议,我想利用所有现有的 WCF 优点,使用双向(请求/响应 + 回调)WCF 通信通道来包装现有的流。
我的问题是,我该怎么做呢...?
更新:
我已经采取了实现自定义传输的方法。我已经实现了这个功能,但我仍然不完全满意...
我已经实现了一个
因此,我可以按照以下方式创建客户端代理以通过流访问服务:
问题:
因此,我正在寻找更好的方法来获取 IDuplexSessionChannels,并在服务器和客户端两端将其包装成通道代理。
或者可能是一个不需要
真正的问题在于,我不想要单个服务器、多个客户端的安排,我在我的 WCF 服务和客户端之间有一个1-1的关系。是否有正确的方法来实例化其中之一?
换句话说,我想创建服务器端的服务实例,而不使用 ServiceHost。
在这个阶段,任何建议都将不胜感激。
Stream
的两端,我想在上面进行通信。流的底层实现并不重要,我想在 Stream
级别上工作...与其为流实现自己的通信协议,我想利用所有现有的 WCF 优点,使用双向(请求/响应 + 回调)WCF 通信通道来包装现有的流。
我的问题是,我该怎么做呢...?
更新:
我已经采取了实现自定义传输的方法。我已经实现了这个功能,但我仍然不完全满意...
我已经实现了一个
IDuplexSessionChannel
来包装流,还有适当的 IChannelFactory
和 IChannelListener
,以及创建通道工厂的 Binding Element。现在,我只需通过已连接的流,最终在创建传输通道时将其传递到传输通道中。因此,我可以按照以下方式创建客户端代理以通过流访问服务:
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设置了使用 ServiceHost
创建通道的服务器端,通过 IChannelListener
。在我的情况下,我已经有一个连接的流,而且我将无法监听任何更多的传入连接。我可以解决这个问题,但我不想使用 ServiceHost
来创建通道的服务器端,因为这会导致很多模糊的样板和hack来使其工作。问题:
因此,我正在寻找更好的方法来获取 IDuplexSessionChannels,并在服务器和客户端两端将其包装成通道代理。
或者可能是一个不需要
IChannelListener
的不同 ServiceHost 实现。真正的问题在于,我不想要单个服务器、多个客户端的安排,我在我的 WCF 服务和客户端之间有一个1-1的关系。是否有正确的方法来实例化其中之一?
换句话说,我想创建服务器端的服务实例,而不使用 ServiceHost。
在这个阶段,任何建议都将不胜感激。
ServiceHost
创建一个InstanceContext
和Service实例的事情。当ServiceHost
接受新的传入连接时,它必须执行此操作。我已经建立了连接,所以我想跳过监听部分。这肯定不是不可能的...? - Mark