【问题标题】:How do i 'add web/service reference' to the following web service?如何向以下 Web 服务“添加 Web/服务引用”?
【发布时间】:2011-06-25 02:21:42
【问题描述】:

给定以下 url 网络服务:

http://geoss.compusult.net/wes/serviceManagerCSW/csw?request=GetCapabilities&service=CSW

如何为服务创建代理类?

更多信息HERE。

编辑#1:

上面的托管服务正在实施 OGC 标准 (CSW)。该标准的模式托管在HERE。他们有一些 WSDL HERE。如果我要将URL 放在其中一个 WSDL 到 Visual Studio 的“添加引用/服务”中,我会得到一个 Web 操作列表并将生成一个引用。但是,这行不通,因为它不知道真正的托管服务提供商。所以我不太确定该怎么做。

编辑#2:

这是它生成的:

编辑#3:

根据 John Saunders 的评论检查错误,我得到以下信息:

自定义工具错误:生成失败 服务参考代码 '服务参考 1'。请检查 其他错误和警告消息 细节。 D:\temp\WebApplication2\WebApplication2\Service References\ServiceReference1\Reference.svcmap 1 1 WebApplication2

所以我检查了警告,我看到了一些类似这样的警告:

警告 1 自定义工具警告:不能 导入 wsdl:portType 详细信息:一个 运行时抛出异常 WSDL 导入扩展: System.ServiceModel.Description.XmlSerializerMessageContractImporter 错误:带有目标命名空间的架构 'http://www.opengis.net/cat/csw/2.0.2' 找不到。错误的 XPath 资源: //wsdl:definitions[@targetNamespace='http://www.opengis.net/cat/csw/2.0.2/requests']/wsdl:portType[@name='csw'] D:\temp\WebApplication2\WebApplication2\Service References\ServiceReference1\Reference.svcmap 1 1 WebApplication2

这些是我在 .NET 中使用这些模式进行任何操作时遇到的相同类型的警告。模式不应该与任何语言一起使用吗?下面是一些我对 .NET 和这些架构感到心痛的例子: HERE HERE HERE

所以我不确定是应该责怪架构还是 .NET 无法处理如此大的架构。

事件尽管 Marc 和 Basiclife 都提供了通常可以在“正常”模式下工作的答案,但 John 得到了答案,因为当我认为这不是故障排除问题时,他帮助我解决了问题,而是我缺少的东西.虽然我认为创建客户端没什么大不了的,但我应该知道这些模式。

【问题讨论】:

    标签: asp.net visual-studio web-services ogc


    【解决方案1】:

    右击项目,选择Add Service Reference。输入提供的网址...

    编辑: 添加对 WSDL 的引用。这是 VS 创建代理所需要的。

    创建代理后,您可以在您的应用程序的 web.config / app.config 文件中编辑它实际用于访问服务的 URL

    【讨论】:

    • @capdragon,不,我没有 - 因为您没有指定尝试会出错。马克正在引导你找到正确的答案,所以我不会重复他的答案。如果您下次可以在问题中提供尽可能多的信息,您就更有可能获得有用的答案
    • @Basiclife:你说得对,我应该提到我遇到了一个错误。请继续检查以防我们无法解决它,您可能有一些想法。我也有提供更多信息的 Edit。
    • @Basiclife:当我添加参考时,它并没有修改我的 webconfig。
    • 您是直接将引用添加到您的网站还是解决方案中的另一个项目?也有可能是之前的尝试做出了改变。我将在 2 秒内将示例 xml 块添加到我的帖子中...
    • 或者我不会......我也和你一样(没有.config更改)。这有点出乎意料,因为我以前从未见过这种行为。也许是因为我习惯了 WCF/SOAP 服务。让我调查一下,我会尽快回复你。
    【解决方案2】:

    右键单击您的项目,然后转到Add Service Reference。点击左下角的Advanced,然后再次点击左下角的Add Web Reference。

    当您输入 URL 时,它会查找可用的服务,您可以在项目中选择并命名。

    编辑:

    导入 wsdl 后,您可以通过应用配置更改其基地址。

    编辑 2:

    我也习惯了 WCF 服务 :-) 要更改 URL,请右键单击您的引用,转到属性,然后将 Web Reference URL 更改为您需要的任何内容。

    编辑 3:

    当我添加引用时,我的错误列表中会出现以下警告消息:

    Warning 1 Custom tool warning: DiscoCodeGenerator unable to initialize code generator. No code generated. s:\dev\Sandbox\Sandbox\Web References\net.opengis.schemas\Reference.map

    这就是Reference.cs 为空的原因。

    【讨论】:

    • @capdragon:看起来服务的地址不正确。我得到的错误是“W3C XML Schema 的根元素应该是 ...”,这意味着您提供的地址正在尝试执行请求,而不是公开服务提供的方法。您是否托管此服务?
    • 没错,我得到了同样的错误。我不主持这项服务。我认为它没有与之关联的 WSDL。
    • @capdragon:完全正确。您是否有托管公司的联系人可以将您指向 wsdl?这确实是您所需要的。
    【解决方案3】:

    使用实际的 WSDL 生成服务引用。然后,当您打开代理类时,使用包含EndpointAddress 的构造函数重载。这将包括实际服务的 URL。

    WSDL 中的 URL 只是一个提示。

    【讨论】:

    • @cap:你没有说你使用的是 ASP.NET 网站!!!如果您要使用这些,那么您必须通知试图帮助您的人。网站“项目”与 .NET 或 Visual Studio 中的任何其他内容完全不同,因此除非您告诉我们,否则我们的假设总是是错误的。
    • @cap:你正在使用一个网站。您的代码是动态编译的,甚至可能是动态生成的。我不知道你应该如何找出哪个是代理类。它可能与服务名称同名,并且可能不在任何命名空间中,因为网站认为您太愚蠢而无法理解命名空间。
    • @John:对不起,我可能应该标记 asp.net 而不是 .net。我不知道网站项目与 .NET 中的其他项目有如此大的不同。
    • @cap:它不是 ASP.NET。 ASP.NET Web 应用程序项目是普通项目。只是网站,甚至没有项目文件。
    • @John:所以我应该以不同的方式处理他的问题。为外部 Web 服务创建一个 .NET 代理服务?
    猜你喜欢
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2011-10-13
    • 2011-10-04
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多