级别: 初级 Ope-Oluwa Soyannwo (soyannwo@uk.ibm.com), 软件工程师,Hursley Solution Test , IBM Hursley Kieran Scott (kierans@uk.ibm.com), 解决方案测试专家, IBM Hursley解决方案测试小组(IBM Hursley Solution Test team)
2003 年 10 月 01 日 本文描述了如何用Application Developer创建相同的Web服务,并且从.NET客户端调用它。
© IBM版权所有,2003年。保留所有权利。
引言
这篇文章的第一部分演示了如何创建一个.NET Credit Check Web服务并从WebSphere Studio Application Developer测试服务器调用它。本文将描述如何用ApplicationDeveloper创建相同的Web服务并从.NET客户端调用它。要获得关于如何完成一些普通任务的说明(在本文中没有对这些任务进行详细的讲解),请参见
第一部分中的技巧和提示。
从.NET客户端调用WebSphere Studio Application Developer Web服务
要从.NET客户端调用WebSphere Studio Application Developer(以下简称为Application Developer)Web服务,您必须把Web服务引用添加到.NET客户端中。此Web引用是Application Developer WSDL URL。该WSDL文件(用XML编写的Web服务描述)是客户端用来调用Web服务的键。从此WSDL文件中,.NET可以生成Web服务代理(Proxy)。该代理担当工作站和Internet之间的中介。客户端程序通过代理来与Web服务进行交互。因此,该代理相当于代表用户的客户端,并且从Internet上的服务器中请求页面。当所请求得页面返回时,它使该页面与最初的请求相关联,并且将其发送到.NET客户端。Application Developer Web服务运行在Application Developer测试服务器中。
步骤1:创建一个Application Developer Web服务
从Application Developer客户端调用.NET Web服务,需要完成以下操作步骤:
-
创建一个Application Developer Web服务
-
安装和使用一个.NET客户端来调用该Web服务
您将利用所提供的代码创建一个名为Credit Check(信用检查)的Application Developer Web服务示例,并且从.NET客户端调用它。利用所提供的代码来开发.NET客户端,并将其用作该Web服务细节的输入表单和显示页面。设计这个Credit Check Web服务只是用于测试的目的。取决于从.NET客户端调用哪一种方法,该Web服务可以返回一种简单类型(一个字符串值,表示信用得分),也可以返回一种复杂类型(一个对象,包含关于某个人的详细信息)。
以下是必备软件的清单:
- WebSphere Studio Application Developer Version 5.0
- Internet Information Services (IIS) version 5.0
- .NET Framework version 1.0 or later
- Microsoft Visual Studio .NET Professional 2002 or later
首先,用Application Developer创建一个新的EJB项目。
- 打开Application Developer,然后选择 and select
Start>
Programs>
IBM WebSphere Studio>
Application Developer。指定需要用于会话的目录,例如,
D:\WSADProjects\Webservices\workspace 。
- 打开J2EE透视图。Application Developer首先打开一个空的工作区和J2EE透视图。如果不是这样,则可以选择
Window=>
Open Perspective=>
J2EE。
- 选择
File=>
New=>
Other来创建一个新的EJB项目。选择
EJB(在左边的框中)和
EJB Project(在右边的框中)。单击
Next按钮。
- 确保在Select an EJB Project屏幕上选中Create 2.0 EJB项目。单击
Next按钮。
- 在EJB Project屏幕上为Project Name输入
CreditCheck 。接受缺省设置,然后单击
Finish按钮。
- 在工具栏上单击EJB图标来创建一个EJB。
- 在Enterprise Bean Creation窗口中,确保为EJB Project选中CreditCheck。单击
Next按钮。
- 在Create an Enterprise Bean窗口中,输入
CreditCheck 作为Bean名,输入
creditCheck.ejb 作为Default包。单击
Next按钮。
- 在Enterprise Bean Details屏幕上接受缺省设置。在EJB Java Class Details屏幕上单击
Next按钮。单击
Finish按钮。
接着,创建一个Java包。
- 切换到J2EE Navigator,并且单击
J2EE Navigator Tab(在J2EE HierarchyTab下面)。
- 右键单击文件夹
ejbModule ,展开CreditCheck EJB项目。
- 选择
New=>
Package。
图1. 创建一个新的包
- 输入
creditCheck.javabean 作为包名,然后单击
Finish按钮。在包内创建Java类。这些Java类是Person、Address、Name和Complex Person对象。
- 右键单击刚刚创建好的
creditCheck.javabean 包,再选择
New=>
Class。为Name字段输入
Person ,然后单击
Finish按钮。
- 双击
Person.java 类(它应该在
creditCheck.javabean 内),并且删除其全部内容。
- 将
Person.txt 的内容从
.zip 文件的
DiskB 文件夹复制和粘贴到
Person.java 类中。
- 创建其他三个Java类,名为
Address ,
Name 和
ComplexPerson 。
- 双击
Address.java 类(它应该在
creditCheck.javabean 内),并且删除其全部内容。
- 将
Address.txt 文件的内容从
DiskB 文件夹复制和粘贴到
Address.java 类中。
- 双击
Name.java 类(它应该在
creditCheck.javabean 内),并且删除其全部内容。
- 将
Name.txt 文件的内容从
DiskB 文件夹复制和粘贴到
Name.java 类中。
- 双击
ComplexPerson.java 类(它应该在
creditCheck.javabean 内),并且删除其全部内容。
- 将
ComplexPerson.txt 的内容从
DiskB 文件夹复制和粘贴到
ComplexPerson.java 类中。
- 单击
Close和
Save按钮以保存所有的类。
- 如果
creditCheck.ejb 还没有展开,可以单击它旁边的加号(+)来展开它。
- 双击
CreditCheckBean.java 。滚屏到底部,然后把光标放在
ejbRemove 方法:
public void ejbRemove()
{
}
|
- 之后就按下Press Enter键两次,以在最后的方法和您将要复制进来的代码之间留些空白。
- 复制和粘贴
CreditCheckEJB.txt 的内容。您刚刚复制的代码是Web服务。
- 右键单击代码中的任何地方,然后选择
Source=>
Organize Imports。
- 从导入列表中选择
creditCheck.javabean.Name 来选取它,再分别对
creditCheck.javabean.Address 、
creditCheck.javabean.Person 、
creditCheck.javabean.ComplexPerson 进行相同的操作。
- 单击
Close和
Save按钮。
接着,创建一个Web项目,操作步骤如下:
- 选择
File=>
New=>
Other。再选择
Web(在左边的框中)和
WebProject(在右边的框中)。单击
Next按钮。
- 输入
CreditCheckWeb 作为项目名,然后单击
Finish按钮。
- 右键单击
CreditCheckWeb 并选择
Properties。单击
Java Build Path,
Projects Tab并选取
CreditCheck。单击
OK按钮。
接着,设置引用,操作步骤如下:
- 选择
Window=>
Preferences。
- 如果您通过代理(proxy)访问Internet,则选择
Internet,再选取
Enable proxy,然后输入代理主机和代理端口。要获得关于检查代理设置的详细情况,请参见
第一部分中的提示和技巧。单击
Apply按钮。
- 展开Web Services,然后选择
Code Generation。
- 在Code Generation Tab(右框),选取
Use inlineschema,再单击
Apply按钮。然后单击
OK。
将CreditCheckBean部署为Web服务,操作步骤如下:
- 右键单击
CreditCheckBean.java (它应该是在
CreditCheck/ejbModule/creditCheck.ejb 中)。
- 选择
Web services=>
Deploy as Web service。
- 在“Deploy as Web service”窗口中,确保WebProject为
CreditCheckWeb 。如果它不是,则从菜单中选择它。
- 接受其他缺省设置,然后单击
Next按钮。
- 在“Configure the Java Bean as Web service”屏幕上,选择一个Javabean。再接受缺省Bean(
creditCheck.ejb.CreditCheckBean ),然后单击
Next安钮。
- 在“Specify methods to display”屏幕上接受默认设置,再单击
Next按钮。然后
Finish按钮。该Web服务的WSDL文件在
CreditCheckWeb/WebContent/wsdl/creditCheck/ejb 目录中。
要在一个不同于Application Developer的环境中使用该Web服务,您必须对此WSDL文件作一些新的更改。可以执行以下操作步骤来修改此WSDL文件:
- 双击
CreditCheckBeanService.wsdl ,打开
CreditCheckBeanService WSDL文件。
- 单击Source Tab,以查看WSDL代码。
- 将<import location>元素的值从
CreditCheckBeanBinding.wsdl 更改为
http://
machinename
:
port/CreditCheckWeb/wsdl/creditCheck/ejb/CreditCheckBeanBinding.wsdl
。
- 将<soap:address location>元素的值从
http://
localhost/CreditCheckWeb/servlet/rpcrouter
更改为
http://
machinename/CreditCheckWeb/servlet/rpcrouter
。这使得您的.NET客户机可以定位Application Developer Web服务器来调用该Web服务。
图2.CreditCheckBeanService.wsdl源代码
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="CreditCheckBeanService"
targetNamespace="http://ejb.creditCheck.wsdl/CreditCheckBeanService/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:binding="http://ejb.creditCheck.wsdl/CreditCheckBeanBinding/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://ejb.creditCheck.wsdl/CreditCheckBeanService/">
<import location=
"http://ibmws2:9080/CreditCheckWeb/wsdl/creditCheck/ejb/CreditCheckBeanBinding.wsdl"
namespace="http://ejb.creditCheck.wsdl/CreditCheckBeanBinding/"/>
<service name="CreditCheckBeanService">
<port binding="binding:CreditCheckBeanBinding" name="CreditCheckBeanPort">
<soap:address location="http://ibmws2:9080/CreditCheckWeb/servlet/rpcrouter"/>
</port>
</service>
</definitions>
|
- 单击
Close和
Save按钮。
在服务器上运行项目,操作步骤如下:
- 右键单击
CreditCheckBeanService.wsdl ,然后选择
Run on server。
- 通过把Web服务的WSDL URL输入浏览器来选取它。Web服务的 WSDLURL是
http://
machinename
:
port/CreditCheckWeb/wsdl/creditCheck/ejb/CreditCheckBeanService.wsdl
。浏览器应该包含图3所示的WSDL。
图3.CreditCheckBeanService.wsdl文件
<?xml version="1.0" encoding="UTF-8" ?>
- <definitions name="CreditCheckBeanService"
targetNamespace="http://ejb.creditCheck.wsdl/CreditCheckBeanService/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:binding="http://ejb.creditCheck.wsdl/CreditCheckBeanBinding/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://ejb.creditCheck.wsdl/CreditCheckBeanService/">
<import location="http://ibmws2:9080/CreditCheckWeb/wsdl/creditCheck/ejb/CreditCheckBeanBinding.wsdl"
namespace="http://ejb.creditCheck.wsdl/CreditCheckBeanBinding/" />
- <service name="CreditCheckBeanService">
- <port binding="binding:CreditCheckBeanBinding" name="CreditCheckBeanPort">
<soap:address location="http://ibmws2:9080/CreditCheckWeb/servlet/rpcrouter" />
</port>
</service>
</definitions>
|
- 通过把
http://
machinename
:
port/CreditCheckWeb/wsdl/creditCheck/ejb/CreditCheckBeanBinding.wsdl
输入浏览器来选取绑定的WSDL URL。浏览器应该包含图4所示的WSDL。
图4.CreditCheckBeanBinding.wsdl文件
<?xml version="1.0" encoding="UTF-8" ?>
- <definitions name="CreditCheckBeanBinding"
targetNamespace="http://ejb.creditCheck.wsdl/CreditCheckBeanBinding/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:interface="http://ejb.creditCheck.wsdl/CreditCheckBean/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://ejb.creditCheck.wsdl/CreditCheckBeanBinding/">
<import location="CreditCheckBean.wsdl"
namespace="http://ejb.creditCheck.wsdl/CreditCheckBean/" />
- <binding name="CreditCheckBeanBinding" type="interface:CreditCheckBean">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- <operation name="returnMComplexQuote">
<soap:operation soapAction="" style="rpc" />
- <input name="returnMComplexQuoteRequest">
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://tempuri.org/creditCheck.ejb.CreditCheckBean"
parts="title surname forename houseNo address1 address2 country
postcode policyID" use="encoded" />
</input>
- <output name="returnMComplexQuoteResponse">
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://tempuri.org/creditCheck.ejb.CreditCheckBean" use="encoded" />
</output>
</operation>
- <operation name="ejbActivate">
<soap:operation soapAction="" style="rpc" />
- <input name="ejbActivateRequest">
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://tempuri.org/creditCheck.ejb.CreditCheckBean" use="encoded" />
</input>
- <output name="ejbActivateResponse">
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://tempuri.org/creditCheck.ejb.CreditCheckBean" use="encoded" />
</output>
</operation>
|
用在.NET中的WSDL是Web服务WSDL。它是
http://
machinename
:
port/CreditCheckWeb/wsdl/creditCheck/ejb/CreditCheckBeanService.wsdl
。
步骤2:安装和使用一个.NET客户端来调用该Web服务
从可下载的
.zip 文件(在
第一部分底部)中提供的文件创建一个.NET客户端。该客户端可用于调用Application Developer Web服务。它显示来自该Web服务的结果(取决于调用什么方法)。要创建该客户端,可以执行以下操作步骤:
- 将所提供的.NET客户端复制到您的工作站上。
- 打开Visual Studio Projects。该客户端代码应该在名为
MyDocuments 的文件夹中。
- 将
CreditCheckApp2 文件夹的内容从
.zip 文件的
DiskE/VisualStudioProjects 复制到
MyDocuments 文件夹中。
- 打开
C:/inetpub/wwwroot/ ,再把文件夹
CreditCheckApp2 从文件夹
DiskE/IIS Projects 复制和粘贴进来。
配置该项目以运行您的机器中的Web服务,操作步骤如下:
- 打开
MyDocuments/Visual Studio Projects/CreditCheckApp2 ,再右键单击CreditCheckApp2。
- 选择
Open With=>
Notepad。
- 将URL中的机器名和端口号更改为您的机器名和端口号。它应该如下所示:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CreditCheckApp2", "http://
machinename
:
port/CreditCheckApp2/CreditCheckApp2.csproj", "{959CE1F1-384D-41C1-8426-AFC9D771A17E}"
例如:
Microsoft Visual Studio Solution File, Format Version 7.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CreditCheckApp",
"http://
dotNet:8040/CreditCheckApp/CreditCheckApp.csproj", "{19E2BD82-A247-482C-806F-7D672D9FEA7F}"
EndProject
|
- 双击CreditCheckApp2,打开Visual Studio .NET中的项目。
- 删除现有的Web引用
serviceRef (通过右键单击它并选择
Delete)。
将该Web引用添加到Application Developer创建的Web服务中,操作步骤如下:
- 选择
Project=>
Add a Web Reference。
图5.添加一个Web引用
- 输入您创建的Application Developer Web服务的URL。它是
http://
machinename
:
port/CreditCheckWeb/wsdl/creditCheck/ejb/CreditCheckBeanService.wsdl
。
图6.输入该Web服务的URL
- 单击绿色弯箭头,再单击
Add Reference。
- 右键单击该Web引用来重新进行命名(它以该Web服务所驻留的机器的名称出现)。选择
Rename,然后输入
serviceRef 。
创建和运行项目,操作步骤如下:
- 从工具栏中选择
Build- >
Build Solution。
- 选择
Debug=>
Start without debugging。Internet Explorer页面打开,并带有一个简介页面。
图7.该Web服务的简介页面
- 根据在线说明来测试该Web服务。
该Web服务输入表单和预期结果示于图8到13中。
图8. 简单引用的输入表单
对于
returnSimpleQuote 方法,结果是一个字符串值,指示信用检查结果是合格还是不合格。
图9. 简单引用的结果
图10. 复杂引用的输入表单
returnComplexQuote 方法的结果是Person对象,它显示
person.creditScore 和
person.creditWeight 。可以显示所有的person特性。
图11. 复杂引用的结果
图12. 更复杂的引用的输入表单
returnMComplexQuote 方法的结果是person对象,它显示
person.name.title 、
person.name.firstname 、
person.name.lastname 、
person.address.house number 、
person.address.address1 、
person.address.address2 、
person.address.postcode 、
person.address.country 、
person.creditScore 和
person.creditWeight 。可以显示所有的person特性。
图13. 更复杂的引用的结果
结束语
互操作性是Web服务成功的关键。用WebSphere Studio Application Developer开发的Web服务客户端可以成功地调用.NET C# Web服务。同样,.NET Web服务客户端可以成功地调用Application Developer Web服务。简单的和复杂的Web服务都可以互操作,而不用考虑所用的技术(J2EE或.NET)和它们所驻留的服务器构架(WebSphere Application Server或IIS)。
第一部分演示了从Application Developer客户端调用.NET Web服务(部署在Microsoft IIS上)。本文演示了从.NET客户端调用Application Developer Web服务(部署在WebSphere Application Server上)。
参考资料
作者简介  | |  |
Ope-Oluwa Soyannwo是一名Web服务测试员(Web
services tester),工作在IBM Hursley的IBM Hursley解决方案测试部门(IBM
Hursley Solution Test Department)。她从事IBM WebSphere产品和Microsoft Visual Studio
.NET产品之间的互操作性的测试工作。您可以通过
soyannwo@uk.ibm.com与Ope联系
|
 | |  |
Kieran Scott是一位解决方案测试专家(Solution
Test Specialist),在IBM Hursley解决方案测试小组(IBM Hursley Solution Test
team)从事WebSphere平台系统企业(WebSphere Platform System House)研究。他的工作是开发解决方案,以测试专门用于Web服务的IBM产品的互操作性。您可以通过
kierans@uk.ibm.com与Kieran联系。
|
对本文的评价
|