1

我正在使用 WCF 编写一个应用程序,其中客户端订阅服务器,然后将更新推送回客户端。

订阅者使用在服务器上调用 Subscribe() 方法的 DuplexPipeChannel 订阅服务器。

服务器维护一个订阅者列表<>,当有数据要推送给订阅者时,它调用 PushData() 方法。

我的意图是遍历订阅者列表,依次调用每个订阅者的 push 方法。

我想知道的是:在我的订阅服务器上调用 push 方法是否阻塞?连接失败或连接到其中一个订阅者的延迟是否会导致其余的推送调用延迟(或更糟的是失败)?

如果这是一个明显的问题,我很抱歉,但到目前为止,我主要是一个 .Net 2.0 的人,所以我对 WCF 知之甚少。

我的 WCF 代码松散地基于本教程

另一个问题 假设它是同步的,我最好生成一个新线程来处理客户端请求,还是为每个“推送服务器端”生成一个新线程更好?

4

2 回答 2

4

WCF 调用默认情况下是同步的,尽管它们可以配置为异步的。请参阅下面的 Jarrett 的回答。看看这里。您发送的每条消息都会收到一个结果,无论您是否真的在期待数据。

该调用将根据您的服务器的功能而阻塞。如果服务器上的 PushData 实际上遍历订阅者列表并向每个订阅者发送一条消息,它会。如果 PushData 仅插入数据而另一个线程处理将数据发送给订阅者,则它只会在您的服务器插入数据并返回时阻塞。

希望这可以帮助。

编辑:关于生成线程客户端与服务器端。服务器端。如果一个客户端调用需要一段时间,那就是一段时间,但如果需要很长时间,因为服务器实际上是在同一个调用中向其他客户端发送调用,那么就有问题了。我实际上不会每次都真正产生一个新线程。只需在您的服务器端创建一个生产者/消费者模式,这样每当数据项排队时,消费者就会选择它。地狱,你甚至可以有多个消费者。

于 2009-02-25T14:48:00.240 回答
3

如果您右键单击服务参考,您可以选择创建异步调用。(设置对话框上有一个复选框。)我通常创建异步方法,然后监听结果。虽然需要做更多的工作,但我可以使用异步服务操作编写响应速度更快的应用程序。

于 2009-02-25T15:13:04.393 回答