2009-02-25 59 views
1

我正在写一个应用程序使用WCF客户端订阅服务器,然后更新被推回到客户端。WCF中的调用是否同步?

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

服务器维护订户的列表,当有数据推送给订户时,它调用PushData()方法。

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

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

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

我的WCF代码松散地基于this tutorial

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

回答

4

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

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

希望这会有所帮助。

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

3

如果右键单击服务引用,则可以选择创建异步调用。 (在设置对话框中有一个复选框。)我通常创建Async方法,然后监听结果。虽然这有点多,但我可以使用异步服务操作编写响应速度更快的应用程序。

+0

我已更新我的回复以包含此信息。 +1 – 2009-02-25 15:16:11