4

这是对这个问题的跟进。

正如@Benjamin here所建议的那样,我现在正在尝试为我的 wsdl 添加服务参考(而不是 Web 参考)。这是相关wsdl的网址:

https://eu.link.fiatauto.com/tsi/DDUWsAut.php?wsdl

问题是 Visual Studio 生成一个空的代码文件:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.3603
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace test.ServiceReference1 {

}

当我尝试使用 svcutil 手动生成代码时,我得到以下信息:

C:\temp>svcutil https://eu.link.fiatauto.com/tsi/DDUWsAut.php?wsdl
Microsoft (R) 服务模型元数据工具
[Microsoft (R) Windows (R) Communication Foundation,版本 3.0.4506.2152]
版权所有 (c) 微软公司。版权所有。

尝试从“https://eu.link.fiatauto.com/tsi/DDUWsAut”下载元数据。
php?wsdl' 使用 WS-Metadata Exchange 或 DISCO。
错误:无法导入 wsdl:portType
详细信息:运行 WSDL 导入扩展时引发异常:System.Se
rviceModel.Description.XmlSerializerMessageContractImporter
错误: ' ' 字符,十六进制值 0x20,不能包含在名称中。
参数名称:名称
错误源的 XPath://wsdl:definitions[@targetNamespace='urn:ddu']/wsdl:portT
类型[@name='dduPortType']


错误:无法导入 wsdl:binding
详细信息:导入 wsdl:portType 时出错,该 wsdl:binding 是 de
挂在。
wsdl:portType 的 XPath: //wsdl:definitions[@targetNamespace='urn:ddu']/wsdl:port
类型[@name='dduPortType']
错误源的 XPath://wsdl:definitions[@targetNamespace='urn:ddu']/wsdl:bindi
ng[@name='dduBinding']


错误:无法导入 wsdl:port
详细信息:导入 wsdl:binding 时出错,该 wsdl:port 是依赖的
继续。
XPath 到 wsdl:binding: //wsdl:definitions[@targetNamespace='urn:ddu']/wsdl:bindi
ng[@name='dduBinding']
错误源的 XPath://wsdl:definitions[@targetNamespace='urn:ddu']/wsdl:servi
ce[@name='ddu']/wsdl:port[@name='dduPort']


正在生成文件...
警告:未生成任何代码。
如果您尝试生成客户端,这可能是因为元数据文档
评论不包含任何有效的合同或服务
或者因为发现所有合同/服务都存在于 /reference assembl
即。验证您是否将所有元数据文档传递给该工具。

警告:如果您想从模式生成数据协定,请确保
使用 /dataContractOnly 选项。

也许这也与尝试通过添加 Web 引用而不是服务引用来使用服务时出现问题的事实有关(请参阅我的其他问题)?

我想那个 wsdl 有问题,但我找不到到底是什么。

由于这是已被其他人使用的第三方服务,我认为他们不会愿意更改他们的服务,那么是否有任何解决方法可以让 .NET 与该 Web 服务通信?

4

2 回答 2

3

WSDL 中有一个错误。消息的最后一部分在dduAbortRequest名称的末尾有一个空格。这可能只是一个错误。告诉他们,他们会解决它,他们会感谢你告诉他们。

WSDL 只是按原样无效。

<message name="dduAbortRequest">
    <part name="Ticket" type="xsd:string"/>
    <part name="ServiceId" type="xsd:string"/>
    <part name="LoginId" type="xsd:string"/>
    <part name="DocId " type="xsd:string"/> <!-- Should be "DocId" -->
</message>
于 2009-12-23T20:12:51.280 回答
0

免责声明:这可能不是您问题的直接答案,但我只是浪费了 3 个小时试图修复同样的错误消息 - 所以我也想在这里发布。


Warning: No code was generated错误消息也可能由C:\Windows\Temp目录上的应用程序池用户缺乏权限触发(是的,真的!)。

如果您遇到此错误,我首先建议您在尝试使用“添加服务引用”对话框时切换到命令行。为您的服务 URL 打开 Fiddler 运行此命令。

 svcutil.exe https://dev.example.com/ShoppingCartWS/WCF/ShoppingCartWCF.svc?wsdl

如果您看到任何请求返回 500(红色)和以下响应:

ReadResponse() failed: The server did not return a response for this request.                                                                            

然后检查C:\Windows\Temp并添加您的应用程序池正在运行的任何用户以获得权限。

这是我找到解决方案的地方 - 非常感谢!.

于 2010-09-17T03:14:48.660 回答