动态调用Web Service

在visual stdio .net的开发环境中,使用web service通常的办法是通过添加WEB引用。

在实际的编程过程中出现了一个问题:添加的web引用在窗体中使用正常,在类中却不能使用。

那么,如何解决呢?

我们可以通过WSDL工具来生成web service的代理类,而生成的代理类是可以被类使用的。

在命令提示处,使用 Wsdl.exe 创建代理类,(至少)指定到 XML Web services 或服务说明的 URL 或到保存的服务说明的路径。

 /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 方法:AddBeginAddEndAdd。代理类的 Add 方法用于与 Add XML Web services 方法进行同步通信,但 BeginAddEndAdd 方法用于和 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 类型时,它将在生成的代理类中创建一个“对象数组”。若要确保对象类型转换正确,请打开包含生成的代理类的文件,将所有不正确的对象类型更改成所需的对象类型。

 

你可能感兴趣的:(技术随笔,web,service,xml,domain,soap,.net)