.NET Web 服务的自动调用


概述

本教程使用 Oracle9i JDeveloper 及其内置 UDDI 浏览器在公共 Microsoft UDDI 注册表中定位 .NET Web 服务。同时还介绍了 Oracle9i JDeveloper 如何能够自动生成 Java 客户机来调用该 .NET Web 服务。可以将这种轻型的 Java 客户机合并到其他 Web 或桌面应用程序中。

阅读并了解背景

如果您是第一次接触 Web 服务,则可能需要首先查看 Web 服务中心的Web 服务初学者部分。

本教程使用 Oracle9i JDeveloper 自动生成调用 .NET Web 服所需的代码。以前的教程 .NET Web 服务的手动调用介绍了如何手动构造示例 .NET XML SOAP 消息。

本教程中将要使用的 .NET 服务 WeatherForecast 可以在网站 XMethods 上找到,也可以在公共 Microsoft UDDI 注册表(这是其在本教程中的位置)中注册。此服务接受包含邮编的 SOAP 消息,并返回该邮编所处地区的当前天气情况。它将天气情况作为 String 对象或复杂的数据类型返回。注意,有时可能无法使用此服务。

软件要求

开始学习本教程之前,您应确保已按照 Oracle9i JDeveloper 9.0.3 Web 服务快速入门安装中的说明安装了 Oracle9i JDeveloper 9.0.3。

教程步骤

1. 下载并解压缩此示例的源代码。此代码预先配置在 Oracle9iJDeveloper 工作区和项目中。

2. 通过双击 \jdev\bin\jdevw.exe 文件启动 Oracle9i JDeveloper,其中 是安装 Oracle9iJDeveloper 的位置。

3. 选择菜单 File->Open。导航至已解压缩源代码的目录并单击文件 JavaNET.jws,然后单击 Open 按钮

4. 打开 JavaNET.jws 工作区并单击 JavaNET.jpr 文件。这将建立通过以下步骤要在其中生成代码的项目文件。

.5. 此步骤适用于需要通过代理服务器访问互联网的用户。

a. 如果您使用未经验证的代理服务器访问互联网,请转至菜单 Tools->Preferences 并导航至 Proxy Server节点。将该代理服务器设置为您的代理服务器,然后单击 OK

b. 如果您的代理服务器需要进行用户验证来访问 互联网,则不要在 Oracle9i JDeveloper 中配置您的代理设置,而应该指向位于

http://hosting001.vs.k2unisys.net/Weather/PDCWebService/WeatherServices.asmx?WSDL

的 WSDL 处的一个正确配置的浏览器,并将其下载至您的本地文件系统中。然后跳至步骤 17,因为演示程序的 UDDI 注册表浏览器部分仅适用于未设置口令的代理服务器。

如果您可以直接连接到独立于代理服务器 互联网,则不必执行这些操作。

6. 导航至系统导航器的 Connections 节点,打开 UDDI Registry 节点并用鼠标右键单击 Microsoft Public UDDI v2 Registry 项,然后选 Find Web Services...

7. 单击 Next 按钮,跳过 Find Web Services 向导的 splash 屏幕。

8. 在查找 Web 服务向导的第一个屏幕上,选择 Name 查找选项并单击 Next

9. 在查找 Web 服务向导的第二个屏幕上,在 Search For 文本框中输入“weather”并单击 Next

10. 在查找 Web 服务向导的第三个屏幕上,选择 tModel 名称为 Weather Forecast 的 Web 服务(按教程编写日期位于列表中的第八位)并单击 Next

11. 在查找 Web 服务向导的第四个屏幕上,确保选择了适用于本教程的正确服务,检查天气预报 Web 服务的业务名称是否为 Unisys。单击 Next

12. 在查找 Web 服务向导的第五个屏幕上,单击Finish

13. 单击“完成”之后,将出现 Find Web Service 向导对话框。选择 Just add the business providing this service to the UDDI browser 并单击 OK

14. 要查看描述此 Web 服务的报告,请在 UDDI 浏览器中展开 Unisys 节点,接着展开Services节点,然后用鼠标右键单击 Get Weather Forecast 节点并选择 View Report

注意,此服务的 URL 以 .asmx 扩展名结尾,表明此服务是使用 Microsoft .NET 来实施的。

15. 测试此 Web 服务是否可用,方法为打开浏览器并导航至以下 URL:

http://hosting001.vs.k2unisys.net/Weather/PDCWebService/WeatherServices.asmx

输入有效的邮编(例如 94403 或 94065)并确认此 Web 服务是否正在工作。

16. 返回到 Oracle9i JDeveloper,在 UDDI 注册表浏览器中展开Get Weather Forecast服务节点,并导航至节点 Unisys Weather Forecast。单击鼠标右键并选择Generate Web Service Stub/Skeleton

17. 在 Web 服务 Stub/Skeleton 的步骤 1 中,执行以下操作:

a. 如果您是从步骤 16 到达此步骤,则 WSDL 的 URL 位置已预填入 UDDI 注册表浏览器 — 请将此值保留为缺省值。如果您使用的是经过验证的代理并从步骤 5 到达此步骤,请将Web 服务 Stub/Skeleton 指向您保存 Web 服务 WSDL 的文件位置。

b. 选中Generate Client-Side Stubs复选框。

c. 选中Generate Main Method复选框。

d. 如果您访问 互联网 需要代理验证,则还要选中Generate Basic HTTP Authentication Code复选框。代理验证不是基本的验证,但从基本验证生成代码将有利于编写代理验证代码。

e. 单击下一步

注意,如果您是从步骤 5 到达此步骤,则通过用鼠标右键单击 JavaNET.jpr 项目,选择New并在Object Gallery中选择 Web Service节点,然后选择 Web Services Stub/Skeleton,可以调用 Web 服务占位模块/骨架向导。

18. 在 Web 服务 Stub/Skeleton 的第二个屏幕上。此树表示天气预报 WSDL 文件中描述的方法,它使 Oracle9iJDeveloper 能够创建向 Web 服务发送 SOAP 消息的一般 Stub。单击Finish按钮以结束此向导。单击Finish

19. Web 服务 Stub/Skeleton 将生成 3 个文件。DailyForecast.javaWeatherForecast.java 用于序列化 Web 服务中复杂的数据类型,而 WeatherServicesStub.java 则用于调用 Web 服务。

20. 为确保生成成功,请用鼠标右键单击 JavaNET.jpr 项目并选择 Rebuild JavaNET.jpr,然后确认是否存在编译错误消息。


21. 双击生成的 Java 类 WeatherServicesStub.java 并查看源代码。

22. 如果您根据访问 互联网 需要代理验证的要求,在 Web 服务 Stub/Skeleton 中选中了Generate Basic HTTP Authentication Code ,请在 WeatherServicesStub.java 构造函数中找到下列行。

Properties props = new Properties();
props.put(OracleSOAPHTTPConnection.AUTH_TYPE, "basic");
props.put(OracleSOAPHTTPConnection.USERNAME, "your_username");
props.put(OracleSOAPHTTPConnection.PASSWORD, "your_password");
m_httpConnection.setProperties(props);

使用下列对您的代理配置所做的更新替换此部分代码:

Properties props = new Properties();
props.put(OracleSOAPHTTPConnection.PROXY_AUTH_TYPE, "basic");
props.put(OracleSOAPHTTPConnection.PROXY_HOST, "www-your-proxy");
props.put(OracleSOAPHTTPConnection.PROXY_PORT, "80");
props.put(OracleSOAPHTTPConnection.PROXY_USERNAME, "your_username");
props.put(OracleSOAPHTTPConnection.PROXY_PASSWORD, "your_password");

m_httpConnection.setProperties(props);


23. 查找注释行:

// Add your own code here.

24. 添加下列代码:


// Text output of forecast
System.out.println(stub.GetWeatherText("94065"));

// Object output of forecast
WeatherForecast wf = stub.GetWeather("94065");
System.out.println("Tempature is:" + wf.getCurrentTemp());


25. 用鼠标右键单击 WeatherServicesStub.java 并选择Run

26. 成功运行的结果是在 Oracle9i JDeveloper 日志窗口中产生输出,告知邮编为 94065 的地区的天气预报。

27. 要查看客户机与服务器之间的 SOAP 消息,请选择菜单 Tools->TCP Packet Monitor。由于示例代码两次调用此服务,第二次导致返回复杂的数据类型,这样对于将消息的结构理解为客户机与服务器之间的数据流很有用。

28. 要查看来回流动的 SOAP 消息,请通过单击绿色的启动箭头来启动 TCP 数据包监视器。

29. 然后返回 WeatherServicesStub.java,并通过选择“历史记录”选项卡中的消息事务处理并单击有关消息内容的“数据”选项卡在 TCP 监视器中查看 SOAP 消息。

30. 这就完成了 .NET Web 服务的自动调用教程。

寄送此页面
Printer View 打印机视图