【问题标题】:Why does my service reference only generate asynchronous methods?为什么我的服务引用只生成异步方法?
【发布时间】:2009-01-29 21:26:14
【问题描述】:

我在 VS2008 中有一个服务参考(不是 Web 参考)指向我没有编写的 Web 服务。参考有效,但我只能使用每种方法的异步版本。

在“配置服务参考”对话框中,“生成异步操作”被选中并显示为灰色。首先,我认为选中此框会生成异步方法,而不是阻塞方法。其次,我以前从未见过它变灰。

我在编写 WCF 和 ASMX 时代的 Web 服务的两个方面都有经验,并且以前从未见过这种情况。这可能是什么原因造成的?

谢谢。

【问题讨论】:

  • 您能告诉我们您的客户端和主机配置文件的相关部分吗?

标签: visual-studio-2008 wcf silverlight web-services


【解决方案1】:

我愿意赌 10 票赞成,因为您在 Silverlight 中这样做。不幸的是,我没有安装工具,所以我无法测试这个理论,但我知道来自 Silverlight 的服务调用只能是异步的。也许您正在使用 Silverlight 项目模板并在那里创建服务引用? Visual Studio 可能足够聪明,知道在这种情况下不会生成阻塞方法。

供参考:

http://msdn.microsoft.com/en-us/library/cc197937(VS.95).aspx

【讨论】:

  • 真的很好奇你是否正确。如果不出意外,这是一个很好的猜测!
  • 你是对的,它是 Silverlight。我很惊讶我忘了提到这一点。这是什么原因?显然,我可以通过立即等待响应将异步调用转换为同步调用(这是禁止吗?)。这很烦人。为什么生成的代码不能为我做到这一点?
  • 我相信原因是 Silverlight 在浏览器的 UI 线程中执行。如果您阻止,整个页面可能没有响应。
  • 是的,我现在感觉不如我最初写那条评论时那么聪明。在我的情况下,我什至不需要阻止,虽然我可以想到你需要 Web 服务调用的情况,第二个取决于第一个,它有点做作,geofftnz 链接的文章有帮助。跨度>
  • @randolpho 你以为你已经摆脱了 javascript 的异步特性,不是吗。我做得很好:-)
【解决方案2】:

Silverlight 插件正在浏览器 UI 线程上运行。如果您进行同步网络调用,您将阻塞整个浏览器 UI 线程。在 Chrome 中,这会导致标签页无响应,在 IE 等其他浏览器中,整个浏览器会显示为锁定状态。

因此,如果只支持异步网络,您就不得不以异步方式编写应用程序。

【讨论】:

    【解决方案3】:

    Silverlight 仅生成异步服务调用。但是请检查此CodeProject page

    当我开始使用 Silverlight 时,一开始我就受到了影响。然后我意识到我应该更改我的代码以使用异步模型。您不想在等待服务调用返回时阻塞 UI 线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2015-02-27
      相关资源
      最近更新 更多