0

我将 Visual Studio 2005 附带的 .Net 命令行 WSDL 实用程序指向用 Java 实现的 Web 服务(我无法控制),它会吐出以下错误:

WSDL : error WSDL1: Unable to cast object of type 'System.Xml.XmlElement' 
to type 'System.Web.Services.Description.ServiceDescriptionFormatExtension'.

然而,如果我通过“添加 Web 引用”对话框将 Visual Studio 2005 本身指向该服务,它会为我生成一个代理类就好了。

我正在使用 WSDL 实用程序来生成我所有的其他服务代理(尽管旧的确实会发出一堆警告)。

目前,我将 WSDL 实用程序指向已部署 Web 服务的 URL。所有这些都是用Java开发的。

我想在构建过程中使用 WSDL 命令行实用程序来确保每次编译时我都拥有最新的代理代码。

4

3 回答 3

2

尝试指定选项协议SOAP12

/protocol:protocol(如 MSDN 上所示

指定要实现的协议。您可以指定 SOAP(默认)、HttpGet、HttpPost 或配置文件中指定的自定义协议。使用 /parameters 选项时,此值是元素并包含字符串。

如果这没有帮助,那么......

Visual Studio 的“添加 Web 引用”在添加 Web 引用时调用 WSDL.exe。基本上没有区别,除了从命令行运行WSDL.exe命令时保留的控制。我怀疑您的其中一个论点与 Visual Studio 设置的论点不正确或不同。

要对此进行测试,您需要比较生成的 2 个不同 XSD 文件的输出,这将为您提供更多关于错误的线索(正如 Klathzazt 所建议的那样)。

祝你好运

于 2009-01-30T12:05:15.657 回答
0

这是一个 XSD 文件吗?文件有依赖关系。下载依赖文件并将它们与您下载的 XSD 并排/并排放置。我会假设 Visual Studio 可能会获取依赖项。

如果这不能解决问题,请提供更多详细信息。

于 2009-01-27T17:05:55.527 回答
0

我能够通过使用 ServiceBehavior 装饰(具体)服务并给它一个命名空间来摆脱这个错误。

using System.ServiceModel;

[ServiceBehavior(Name = "MyConcreteServiceName", Namespace = "http://www.mycompany.com/services/")]
public class MyConcreteService: IMyService
{
}

注意:通过服务类(而不是合同(接口))上的 ServiceBehavior 属性设置

而不是这个:

<wsdl:definitions name="MyConcreteServiceName" targetNamespace="http://tempuri.org/">

我懂了:

<wsdl:definitions name="MyConcreteServiceName" targetNamespace="http://www.mycompany.com/services/">
于 2011-06-01T19:40:54.107 回答