【问题标题】:.net web service: Can't add service reference, only web reference.net Web 服务:无法添加服务引用,只能添加 Web 引用
【发布时间】:2011-01-23 17:28:18
【问题描述】:

我有一个使用 Web 服务的现有项目。一个是作为服务参考添加的,另一个是作为 Web 参考添加的。我不记得为什么要添加一个作为网络参考,但也许是因为我无法让它工作!

一个 Web 服务的现有服务参考工作正常,因此不是 .net 版本问题。

我可以成功地为第二个 Web 服务创建服务引用,但是没有一个方法可用。 .wsdl 显示架构,但 Reference.vb 仅显示命名空间,不显示任何方法。

澄清一下,这是两个不同的第 3 方网络服务提供商。

我们希望转到服务参考,以便在遇到各种超时问题时更好地控制配置。

以前有人遇到过这个吗?

编辑

地址有两个服务有关系吗?

编辑

我正在使用 .net 3.5 和 VS2008。

alt text http://img139.imageshack.us/img139/719/addservicereference.gif

【问题讨论】:

  • 您确定正在查看的 WSDL 完整/正确吗?它可能看起来不错,但可能有一个小问题导致事情失败......
  • 它与 Web 参考的 wsdl 位置相同,可以正常工作。
  • 我遇到过这种情况,不记得我做了什么来获取服务参考。当然,我没有记下它。
  • Cripes,谢谢安东尼!
  • 是的,我真希望我记得。我想我只是一直在参考添加对话框中四处寻找。

标签: .net web-services


【解决方案1】:

你说“方法不可用”到底是什么意思?

许多这样说的人都希望这些方法能够以与“添加 Web 引用”完全相同的方式提供。但它们是不同的。请参阅“How to Consume a Web Service”。

【讨论】:

  • John,如果您阅读以上内容,您会发现我已经成功使用了第 3 方 Web 服务之一,并且它已作为服务参考添加。另一个我可以成功添加,但是命名空间下没有可用的方法(智能感知或对象浏览)。但是,当添加为网络参考时,它确实可以正常工作。
  • @ScottE:感谢您的澄清。我建议你从命令行运行 svcutil 让它尝试生成代理类。这样做的好处是,如果有任何错误,它们就会被显示出来。您还可以查看 reference.cs 文件以查看是否有 cmets 指示生成代码时出现问题,或者您可能会注意到存在什么和不存在什么方面的模式。
  • reference.cs 文件为空。我将尝试命令行,看看会发生什么。谢谢。
  • John - 使用 svcutil 成功了。这不是您答案的一部分,因此我无法将您的答案标记为正确。感谢您的意见。
  • @ScottE:如果 svcutil 正常工作,但“添加服务引用”失败如此严重,那么请帮我们一个忙,并在 Connect (connect.microsoft.com/visualstudio) 上报告此问题。报告后,请在您的问题中发布错误报告 URL,以便我们对其重要性进行投票。我相信这是我第一次听说这两种方法几乎不等价。
【解决方案2】:

我怀疑它正在尝试重新使用其他参考中的类型。单击高级... 并删除“在引用的程序集中重用类型”框。您还应该确保服务名称是唯一的,以避免冲突。

【讨论】:

  • 不,不是这样。我也尝试将服务引用添加到新的 Web 应用程序项目。您是否已通过添加服务引用向导成功地将服务引用添加到具有多个可用端点的 wsdl?或者,就像 John 建议的那样,这需要通过命令行来完成吗?
【解决方案3】:

您是否尝试过添加对 C# 项目而不是 VB.NET 项目的引用?

我注意到您服务上的所有方法都命名为“getXXX”,这可能与 VB.NET 生成器上的某些“智能”处理发生冲突。

尝试创建一个新的 C# 项目并添加服务引用。

【讨论】:

  • 在 vb.net 中“添加 Web 参考”运行良好,似乎是在黑暗中拍摄,但我会试一试。
【解决方案4】:

“添加服务引用”功能是出了名的麻烦而且有问题 - 我大部分时间都在使用它,但偶尔我会遇到问题,它生成的代码要么像这样(即不存在),要么不能重用应该做的类型。

您应该尝试使用 svcutil 命令行工具(打开一个 VS 命令提示符来运行它),它虽然类似于 VS 的参考功能,但实际上是一个完全不同的代码库。您可以使用它来生成代理、所有客户端类型等,就像使用服务引用功能一样。

最重要的是——它似乎几乎一直都在工作——只要服务本身是健全的。

【讨论】:

    【解决方案5】:

    虽然是老帖子,但只是想分享一下我的经验,以便今天对某些人有所帮助。

    与在 Java、Phython 或 Ruby 等平台上开发的 Web 服务进行通信时,可能是由于合规性问题(WS-I 互操作性标准)而无法生成存根/代理类的原因。您可能会遇到以下错误:

    未能为服务引用生成代码 服务参考名称。详情请查看其他错误和警告消息...

    您可以通过使用svcutil.exe 获得的实际错误详细信息当然在这种情况下错误可能类似于:

    错误:无法导入 wsdl:portType

    对于此类服务,最好使用 Web 服务参考,而不是 服务参考。 (添加服务参考 -> 高级 -> 添加 Web 参考...)

    如果您热衷于使用 XML 和 WSDL,您可以继续解决绑定和 portType 的问题。如果我记得上次我浪费时间修复它以使其与服务参考选项一起工作,那么可能需要更正导入和包含。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 2013-02-05
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多