gpt4 book ai didi

web-services - Visual Studio 2013 使用有效的 wsdl 文件创建服务数据源时出错

转载 作者:行者123 更新时间:2023-12-01 19:33:53 28 4
gpt4 key购买 nike

我一直在编写一个项目,使用几种不同的网络服务来获取运输报价。对于前两个服务,通过提供服务的 .asmx 文件的 URL,我可以毫无问题地将它们添加为服务数据源。

对于最近的服务,我只获得了 link to a wsdl file 。我使用 wsdl-analyzer.com 来验证该文件,该文件似乎是 completely valid 。当我尝试将 WSDL 作为服务数据源添加到 Visual Studio 项目时,WSDL 失败并显示以下错误消息。

There was an error downloading 'http://api.shipprimus.com/webservicesPrimus.wsdl/_vti_bin/ListData.svc/$metadata'.

The request failed with HTTP status 404: Not Found.

Metadata contains a reference that cannot be resolved: 'http://api.shipprimus.com/webservicesPrimus.wsdl'.

The content type text/plain of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly.

The first 1024 bytes of the response were:

'<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:tns="http://api.shipprimus.com" xmlns:xsd1="http://api.shipprimus.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://api.shipprimus.com">
<!-- TYPES -->
<wsdl:types>
<xsd:schema targetNamespace="http://api.shipprimus.com">
<!-- GetRatesRequest -->
<xsd:element name="GetRatesRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Username" type="xsd:string"/>
<xsd:element name="Password" type="xsd:string"/>
<xsd:element name="Carrier" minOccurs="0" type="xsd:string"/>
<xsd:element name="OriginZipCode" type="xsd:string"/>
<xsd:element '.

If the service is defined in the current solution, try building the solution and adding the service reference again.

我尝试的第一步是联系提供该服务的公司,询问他们是否可以提供帮助,但他们不使用 Visual Studio,因此在尝试添加 Visual Studio 服务时他们没有提供任何帮助。

然后我开始环顾四周,看看是否有其他方法可以从我所获得的服务中添加该服务。我发现this问题,相似但不完全相同。还有其他几个有关 WSDL 文件和向 Visual Studio 添加服务的问题,但没有一个对我有帮助。

当我尝试使用下载的 WSDL 文件的本地路径添加服务时,如 answer receiving the bounty 中的建议对于上面的问题,尽管有不同的错误,但它仍然不起作用。

The document at the url file:///C:/Users/isellar/Downloads/webservicesPrimus.wsdl was not recognized as a known document type.
The error message from each known type may help you fix the problem:

- Report from 'WSDL Document' is 'There is an error in XML document (364, 19).'.
- The element was not expected in this context:
<xsd:anotation xmlns:xsd='http://www.w3.org/2001/XMLSchema'>..</xsd:anotation>.
Expected elements: http://www.w3.org/2001/XMLSchema:annotation.
If the service is defined in the current solution, try building the solution and adding the service reference again.

它引用了我认为是行号的内容,尽管我不太熟悉“WSDL 文档”的输出,无论它是什么。文件的第 364 行和第 19 行都没有 <xsd:anotation>不过元素。

我还尝试通过 WSDL.exe 运行该文件,正如上述问题的另一个答案所暗示的那样。这样我就得到了与从 Visual Studio 收到的错误类似的错误。我假设 Visual Studio 仅使用 WSDL.exe 来处理 WSDL 文件,因为输出几乎相同,并且 WSDL.exe 位于程序文件中的 Visual Studio 下。

当我尝试将服务添加为 Web 引用时,我得到以下信息:

Primus Service as Web Reference Error

正如您所看到的,它正确地从 WSDL 中获取方法签名,但声称失败并返回 404,并且没有找到任何不同元数据文件的内容。

我决定使用 SoapUI 来查看该服务是否处于事件状态。连接到该服务并且它运行没有任何问题。

我希望有一种简单的方法来修复 WSDL 文件,以便 Visual Studio 可以简单地将服务导入到我的项目中,就像我对其他服务所做的那样。


重要编辑

我通过将定义元素中的行从上面的内容更改为 xmlns:xsd="http://www.w3.org/2001/XMLSchema:annotation" 来导入 WSDL。只需在末尾添加“:annotation”即可。

这导致 WSDL 导入,但 Reference.cs 中没有生成代码,我感觉非常接近解决这个问题,但还很遥远。我仍然希望有一个简单的更改,我可以让 WSDL 正确创建服务引用并为我生成引用代码,因为我已经花了一段时间尝试自己在文件中编写代码,但没有意识到它会当 Visual Studio 尝试(错误地)重新生成代码时,所有内容都会被删除。


尝试通过 SVCUtil.exe 运行修改后的 WSDL

我首先尝试根据 Leandros 的回答通过 svcutil 运行 WSDL,因为我无权访问该服务的 SVC 文件。第一次运行收到与上面第二个代码框相同的错误消息。我还尝试使用最初导入的修改后的 WSDL 来运行,但没有从上面生成代码。这给了我以下错误。

Error: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: Schema with target namespace 'http://api.shipprimus.com' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://api.shipprimus.com']/wsdl:portType[@name='WebservicePrimusServicePort']


Error: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://api.shipprimus.com']/wsdl:portType[@name='WebservicePrimusServicePort']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://api.shipprimus.com']/wsdl:binding[@name='WebservicePrimusSoapBinding']


Error: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on. XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://api.shipprimus.com']/wsdl:binding[@name='WebservicePrimusSoapBinding']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://api.shipprimus.com']/wsdl:service[@name='WebservicePrimus']/wsdl:port[@name='WebservicePrimusServicePort']


Generating files...
Warning: No code was generated.
If you were trying to generate a client, this could be because the metadata documents did not contain any valid contracts or services or because all contracts/services were discovered to exist in /reference assemblies. Verify that you passed all the meta data documents to the tool.

Warning: If you would like to generate data contracts from schemas make sure to use the /dataContractOnly option.

最佳答案

这相当简单,网络上的 .wsdl 文件IS无效,因为它包含一些非法元素,即 <xsd:anotation> 上的拼写错误。 。因此定义类型的 xsd 模式被拒绝。

修复

  1. 按照指定在本地下载 webservicesPrimus.wsdl 文件先前的解决方案
  2. 进行全局搜索并替换xsd:annotation 与 xsd:annotation
  3. 将该更新的文件添加为服务引用,您将获得完整填充的 References.cs
  4. 出于礼貌,请联系网络服务的所有者并指出错误。

关于web-services - Visual Studio 2013 使用有效的 wsdl 文件创建服务数据源时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26496851/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com