【发布时间】:2010-12-04 13:45:25
【问题描述】:
我有一个 C# 桌面应用程序,并且我使用 Web 服务没有问题(由“添加服务引用”添加的 wsdl,因此我创建了一个对象并调用它的函数)。
现在,我想使用长轮询技术,但我不知道如何从客户的角度来执行此操作。
如何配置超时? 我应该使用专门用于此的线程吗? 有 C# 桌面应用程序的示例吗? (没找到)
谢谢, 大坝的
【问题讨论】:
标签: c# wsdl client long-polling
我有一个 C# 桌面应用程序,并且我使用 Web 服务没有问题(由“添加服务引用”添加的 wsdl,因此我创建了一个对象并调用它的函数)。
现在,我想使用长轮询技术,但我不知道如何从客户的角度来执行此操作。
如何配置超时? 我应该使用专门用于此的线程吗? 有 C# 桌面应用程序的示例吗? (没找到)
谢谢, 大坝的
【问题讨论】:
标签: c# wsdl client long-polling
您应该能够在 Web 服务对象上配置超时 - 详细信息将完全取决于它使用的类,但请查看 WebClientProtocol.Timeout 的示例。
现在您可以从专用线程同步调用它,或者您可以对 Web 服务进行 异步 调用以开始,指定要执行的回调(可能在线程池线程上) ) 当服务回复时。在这种情况下,您可能会发现您可以指定异步调用本身的超时时间——同样,这将取决于您拥有的 Web 服务代理类的具体类型。
这样你就不需要“浪费”一个线程来等待响应——但是你可能会发现异步编程模型比同步模型更难理解。如果您在任何时候都只收到一两个这样的请求,那么额外的几个线程不太可能成为问题。如果您正在等待来自 500 个不同服务的响应,那就另当别论了,异步模型肯定是要走的路。
【讨论】:
有关线程问题,请参阅 Jon 的回答。
对于超时问题,解决方法如下: 在 vs 2008 中,当我从 wsdl 添加“服务引用”时,它将默认使用 WCF,我找不到如何使用它设置超时值。
所以,当右键单击服务参考时,我必须选择“网络参考”(高级/添加网络参考)。这样,它将仅使用“普通”网络服务,并且 Timeout 参数可用。
【讨论】: