gpt4 book ai didi

wcf - 使用 WCF 包装现有的连接流

转载 作者:行者123 更新时间:2023-12-03 14:25:14 27 4
gpt4 key购买 nike

我有一个双向连接的两端 Stream ,我想对此进行一些交流。流背后的底层实现并不重要,我想在 Stream 工作等级...

我不想为流实现我自己的通信协议(protocol),而是想使用所有现有的 WCF 优点通过双向(请求/响应 + 回调)WCF 通信 channel 来包装现有流。

我的问题是,我该怎么做……?

更新:

我已经走上了实现自定义传输的道路。我已经完成了这项工作,但我仍然对此并不完全满意......

我已经实现了 IDuplexSessionChannel包装流,以及适当的 IChannelFactoryIChannelListener ,以及用于创建 channel 工厂的绑定(bind)元素。现在,我只是通过连接的流,并最终在创建时将它们传递到传输 channel 。

因此,我可以创建客户端代理以通过流访问服务,如下所示:

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 创建 channel 的服务器端.就我而言,我已经有一个连接的流,我将无法再监听任何传入的连接。我可以解决这个问题,但我宁愿不使用 ServiceHost创建 channel 的服务器端,因为我最终得到了很多晦涩的样板和黑客来使其工作。

问题

因此,我正在寻找一种更好的方法来获取 IDuplexSessionChannel,并将它们包装到服务器端和客户端的 Channel 代理中。

或者可能是不需要 IChannelListener 的不同 ServiceHost 实现。 .

真的,这里的问题是我不想要一个服务器,多个客户端的安排,我的 WCF 服务和客户端之间是 1-1 的关系。是否有正确的方法来实例化其中之一?

换句话说,我想在不使用 ServiceHost 的情况下创建服务器端服务实例。

在此阶段,我们将不胜感激任何建议。

最佳答案

在两端使用客户端。不过,您需要仔细定义您的契约(Contract)。如果您在流的任一端都有 ClientA 和 ClientB,那么当 ClientA 发送请求时,ClientB 会期望它看起来像它所定义的回调合约所看到的那样,反之亦然。

关于wcf - 使用 WCF 包装现有的连接流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9514199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com