在visual stdio .net的开发环境中,使用web service通常的办法是通过添加WEB引用。
在实际的编程过程中出现了一个问题:添加的web引用在窗体中使用正常,在类中却不能使用。
那么,如何解决呢?
我们可以通过WSDL工具来生成web service的代理类,而生成的代理类是可以被类使用的。
在命令提示处,使用 Wsdl.exe 创建代理类,(至少)指定到 XML Web services 或服务说明的 URL 或到保存的服务说明的路径。
Wsdl /language:language /protocol:protocol /namespace:myNameSpace /out:filename /username:username /password:password /domain:domain
生成的代理类详细信息
当 Wsdl.exe 用于生成代理类时,将以指定的语言生成一个源文件。该文件包含公开 XML Web services 每个 XML Web services 方法的同步和异步方法的代理类。例如,如果一个 XML Web services 包含一个名为 Add
的 XML Web services 方法,则代理类具有以下方法用来调用 Add XML Web services 方法:Add
、BeginAdd
和 EndAdd
。代理类的 Add 方法用于与 Add XML Web services 方法进行同步通信,但 BeginAdd
和 EndAdd
方法用于和 XML Web services 方法进行异步通信。有关与 XML Web services 方法异步通信的更多信息,请参见与 XML Web services 进行异步通信。
生成的代理类的每个方法都包含适当的代码与 XML Web services 方法进行通信。如果在 XML Web services 和代理类通信过程中出现错误,则将引发一个异常。有关处理异常的详细信息,请参见在 XML Web services 中处理和引发异常。
在 XML Web services 方法和关联的代理类方法中的定义顺序之间,参数顺序可能有所不同。在多数情况下,参数顺序相同。但是,如果 XML Web services 需要 Document 格式的 SOAP 消息,则将出现一种参数顺序不相同的情况。如果 XML Web services 方法在定义输入参数之前定义了输出参数,则在代理类中输出参数放置在所有输入参数之后。例如,在下面的代码示例中,XML Web services 方法 MyWebMethod
在声明 inStr
输入参数之前声明了 outStr
输出参数。但是,在代理类中,在声明 outStr
之前先声明 inStr
参数。
在某些情况下,由 WSDL.exe 生成的代理类会使用一种不常见的命名方法,将对象强制转换成服务说明中指定的类型。因此,代理类中的生成类型可能不是开发人员想要或预期的类型。例如,当 WSDL.exe 在服务说明中遇到 ArrayList 类型时,它将在生成的代理类中创建一个“对象数组”。若要确保对象类型转换正确,请打开包含生成的代理类的文件,将所有不正确的对象类型更改成所需的对象类型。