【问题标题】:How to do a long polling client in C#?如何在 C# 中进行长轮询客户端?
【发布时间】:2010-12-04 13:45:25
【问题描述】:

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

现在,我想使用长轮询技术,但我不知道如何从客户的角度来执行此操作。

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

谢谢, 大坝的

【问题讨论】:

    标签: c# wsdl client long-polling


    【解决方案1】:

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

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

    这样你就不需要“浪费”一个线程来等待响应——但是你可能会发现异步编程模型比同步模型更难理解。如果您在任何时候都只收到一两个这样的请求,那么额外的几个线程不太可能成为问题。如果您正在等待来自 500 个不同服务的响应,那就另当别论了,异步模型肯定是要走的路。

    【讨论】:

    • 感谢您的回复。我已经尝试过使用 WebClientProtocol.Timeout,但我不知道如何处理它。我的代码基本上是: ServiceReference1.TestSOAPImplClient test = new ServiceReference1.TestSOAPImplClient(); label1.Text = test.helloworld();并且没有超时属性。我试图将它添加到生成的 reference.cs 中,但没有结果。我认为某处缺少一个基本步骤 :) (顺便说一句,远程 Web 服务是用 Java 制作的)对于线程问题,我最多只有 2 或 3 个长轮询请求,所以我现在将与线程同步.
    • TestSOAPImplClient 派生自哪个类?
    • 在reference.cs中,我有: [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] 公共部分类TestSOAPImplClient:System.ServiceModel.ClientBase,WS_Client_Test1.ServiceReference1.TestSOAPImpl。 TestSOAPImpl 是一个接口,从无派生。所有这些都是自动生成的,也许这不是使用 Web 服务的最佳方式... :)
    • 嗯...我看不到任何超时,不。不幸的是,我对 WCF 了解不多……
    • 好的,我试试不使用WCF重启项目(其实我不记得选择WCF了……)
    【解决方案2】:

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

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

    所以,当右键单击服务参考时,我必须选择“网络参考”(高级/添加网络参考)。这样,它将仅使用“普通”网络服务,并且 Timeout 参数可用。

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2017-03-12
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      相关资源
      最近更新 更多