繁体   English   中英

WCF 中的调用是否同步?

[英]Are calls synchronous in WCF?

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

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

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

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

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

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

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

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

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

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

希望这可以帮助。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM