如何在C#中建立长轮询客户端?

时间:2009-10-07 09:43:08

标签: c# wsdl client long-polling

我有一个C#桌面应用程序,我使用Web服务没有问题(wsdl添加了“添加服务引用”,因此我创建了一个对象并调用其功能)。

现在,我想使用长轮询技术,但从客户的角度来看,我无法想象如何做到这一点。

如何配置超时? 我应该使用专用的线程吗? C#桌面应用程序有什么示例吗? (还没找到)

谢谢, 坝的

2 个答案:

答案 0 :(得分:4)

您应该能够在Web服务对象上配置超时 - 详细信息将取决于它正在使用哪个类,但请查看WebClientProtocol.Timeout示例。

现在您可以从专用线程同步调用它,或者您可以对Web服务进行异步调用,指定要执行的回调(可能在线程池线程上)当服务回复时。在这种情况下,您可能会发现可以在异步调用本身上指定超时 - 再次,它将取决于您所拥有的Web服务代理类的确切类型。

这样你就不需要“浪费”一个等待响应的线程 - 但你可能会发现异步编程模型比同步编程模型更难理解。如果您在任何时候只有一个或两个这样的请求,那么额外的几个线程就不太可能成为问题。如果您正在等待来自500种不同服务的响应,那么这是另一回事,异步模型绝对是您的选择。

答案 1 :(得分:1)

有关线程问题,请参阅Jon的回答。

对于超时问题,这是解决方案: 在vs 2008中,当我从wsdl添加“服务引用”时,它默认使用WCF,我找不到如何用它设置超时值。

因此,当右键单击服务引用时,我必须选择“Web引用”(高级/添加Web引用)。这样,它将只使用“普通”Web服务,并且Timeout参数可用。