IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

协同使用IBM WebSphere Studio和Microsoft .NET: 第二部分:从.NET客户端调用WebSphere Studio Web服务

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

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服务,需要完成以下操作步骤:

  1. 创建一个Application Developer Web服务
  2. 安装和使用一个.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项目。

  1. 打开Application Developer,然后选择 and select Start> Programs> IBM WebSphere Studio> Application Developer。指定需要用于会话的目录,例如, D:\WSADProjects\Webservices\workspace
  2. 打开J2EE透视图。Application Developer首先打开一个空的工作区和J2EE透视图。如果不是这样,则可以选择 Window=> Open Perspective=> J2EE
  3. 选择 File=> New=> Other来创建一个新的EJB项目。选择 EJB(在左边的框中)和 EJB Project(在右边的框中)。单击 Next按钮。
  4. 确保在Select an EJB Project屏幕上选中Create 2.0 EJB项目。单击 Next按钮。
  5. 在EJB Project屏幕上为Project Name输入 CreditCheck 。接受缺省设置,然后单击 Finish按钮。
  6. 在工具栏上单击EJB图标来创建一个EJB。

  7. 在Enterprise Bean Creation窗口中,确保为EJB Project选中CreditCheck。单击 Next按钮。
  8. 在Create an Enterprise Bean窗口中,输入 CreditCheck 作为Bean名,输入 creditCheck.ejb 作为Default包。单击 Next按钮。
  9. 在Enterprise Bean Details屏幕上接受缺省设置。在EJB Java Class Details屏幕上单击 Next按钮。单击 Finish按钮。

接着,创建一个Java包。

  1. 切换到J2EE Navigator,并且单击 J2EE Navigator Tab(在J2EE HierarchyTab下面)。
  2. 右键单击文件夹 ejbModule ,展开CreditCheck EJB项目。
  3. 选择 New=> Package。
    图1. 创建一个新的包

  4. 输入 creditCheck.javabean 作为包名,然后单击 Finish按钮。在包内创建Java类。这些Java类是Person、Address、Name和Complex Person对象。
  5. 右键单击刚刚创建好的 creditCheck.javabean 包,再选择 New=> Class。为Name字段输入 Person ,然后单击 Finish按钮。
  6. 双击 Person.java 类(它应该在 creditCheck.javabean 内),并且删除其全部内容。
  7. Person.txt 的内容从 .zip 文件的 DiskB 文件夹复制和粘贴到 Person.java 类中。
  8. 创建其他三个Java类,名为 Address , NameComplexPerson
  9. 双击 Address.java 类(它应该在 creditCheck.javabean 内),并且删除其全部内容。
  10. Address.txt 文件的内容从 DiskB 文件夹复制和粘贴到 Address.java 类中。
  11. 双击 Name.java 类(它应该在 creditCheck.javabean 内),并且删除其全部内容。
  12. Name.txt 文件的内容从 DiskB 文件夹复制和粘贴到 Name.java 类中。
  13. 双击 ComplexPerson.java 类(它应该在 creditCheck.javabean 内),并且删除其全部内容。
  14. ComplexPerson.txt 的内容从 DiskB 文件夹复制和粘贴到 ComplexPerson.java 类中。
  15. 单击 CloseSave按钮以保存所有的类。
  16. 如果 creditCheck.ejb 还没有展开,可以单击它旁边的加号(+)来展开它。
  17. 双击 CreditCheckBean.java 。滚屏到底部,然后把光标放在 ejbRemove 方法:

    public void ejbRemove()
    {
    }
                    

  18. 之后就按下Press Enter键两次,以在最后的方法和您将要复制进来的代码之间留些空白。
  19. 复制和粘贴 CreditCheckEJB.txt 的内容。您刚刚复制的代码是Web服务。
  20. 右键单击代码中的任何地方,然后选择 Source=> Organize Imports
  21. 从导入列表中选择 creditCheck.javabean.Name 来选取它,再分别对 creditCheck.javabean.AddresscreditCheck.javabean.PersoncreditCheck.javabean.ComplexPerson 进行相同的操作。
  22. 单击 CloseSave按钮。

接着,创建一个Web项目,操作步骤如下:

  1. 选择 File=> New=> Other。再选择 Web(在左边的框中)和 WebProject(在右边的框中)。单击 Next按钮。
  2. 输入 CreditCheckWeb 作为项目名,然后单击 Finish按钮。
  3. 右键单击 CreditCheckWeb 并选择 Properties。单击 Java Build Path, Projects Tab并选取 CreditCheck。单击 OK按钮。

接着,设置引用,操作步骤如下:

  1. 选择 Window=> Preferences
  2. 如果您通过代理(proxy)访问Internet,则选择 Internet,再选取 Enable proxy,然后输入代理主机和代理端口。要获得关于检查代理设置的详细情况,请参见 第一部分中的提示和技巧。单击 Apply按钮。
  3. 展开Web Services,然后选择 Code Generation
  4. 在Code Generation Tab(右框),选取 Use inlineschema,再单击 Apply按钮。然后单击 OK

将CreditCheckBean部署为Web服务,操作步骤如下:

  1. 右键单击 CreditCheckBean.java (它应该是在 CreditCheck/ejbModule/creditCheck.ejb 中)。
  2. 选择 Web services=> Deploy as Web service
  3. 在“Deploy as Web service”窗口中,确保WebProject为 CreditCheckWeb 。如果它不是,则从菜单中选择它。
  4. 接受其他缺省设置,然后单击 Next按钮。
  5. 在“Configure the Java Bean as Web service”屏幕上,选择一个Javabean。再接受缺省Bean( creditCheck.ejb.CreditCheckBean ),然后单击 Next安钮。
  6. 在“Specify methods to display”屏幕上接受默认设置,再单击 Next按钮。然后 Finish按钮。该Web服务的WSDL文件在 CreditCheckWeb/WebContent/wsdl/creditCheck/ejb 目录中。

要在一个不同于Application Developer的环境中使用该Web服务,您必须对此WSDL文件作一些新的更改。可以执行以下操作步骤来修改此WSDL文件:

  1. 双击 CreditCheckBeanService.wsdl ,打开 CreditCheckBeanService WSDL文件。
  2. 单击Source Tab,以查看WSDL代码。
  3. 将<import location>元素的值从 CreditCheckBeanBinding.wsdl 更改为 http:// machinename : port/CreditCheckWeb/wsdl/creditCheck/ejb/CreditCheckBeanBinding.wsdl
  4. 将<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>
                            
                

  5. 单击 CloseSave按钮。

在服务器上运行项目,操作步骤如下:

  1. 右键单击 CreditCheckBeanService.wsdl ,然后选择 Run on server
  2. 通过把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>
                                    

  3. 通过把 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服务的结果(取决于调用什么方法)。要创建该客户端,可以执行以下操作步骤:

  1. 将所提供的.NET客户端复制到您的工作站上。
  2. 打开Visual Studio Projects。该客户端代码应该在名为 MyDocuments 的文件夹中。
  3. CreditCheckApp2 文件夹的内容从 .zip 文件的 DiskE/VisualStudioProjects 复制到 MyDocuments 文件夹中。
  4. 打开 C:/inetpub/wwwroot/ ,再把文件夹 CreditCheckApp2 从文件夹 DiskE/IIS Projects 复制和粘贴进来。

配置该项目以运行您的机器中的Web服务,操作步骤如下:

  1. 打开 MyDocuments/Visual Studio Projects/CreditCheckApp2 ,再右键单击CreditCheckApp2。
  2. 选择 Open With=> Notepad
  3. 将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
                                        
              

  4. 双击CreditCheckApp2,打开Visual Studio .NET中的项目。

  5. 删除现有的Web引用 serviceRef (通过右键单击它并选择 Delete)。

将该Web引用添加到Application Developer创建的Web服务中,操作步骤如下:

  1. 选择 Project=> Add a Web Reference
    图5.添加一个Web引用

  2. 输入您创建的Application Developer Web服务的URL。它是 http:// machinename : port/CreditCheckWeb/wsdl/creditCheck/ejb/CreditCheckBeanService.wsdl
    图6.输入该Web服务的URL 

  3. 单击绿色弯箭头,再单击 Add Reference
  4. 右键单击该Web引用来重新进行命名(它以该Web服务所驻留的机器的名称出现)。选择 Rename,然后输入 serviceRef

创建和运行项目,操作步骤如下:

  1. 从工具栏中选择 Build- > Build Solution
  2. 选择 Debug=> Start without debugging。Internet Explorer页面打开,并带有一个简介页面。
    图7.该Web服务的简介页面

  3. 根据在线说明来测试该Web服务。

该Web服务输入表单和预期结果示于图8到13中。


图8. 简单引用的输入表单

对于 returnSimpleQuote 方法,结果是一个字符串值,指示信用检查结果是合格还是不合格。


图9. 简单引用的结果


图10. 复杂引用的输入表单

returnComplexQuote 方法的结果是Person对象,它显示 person.creditScoreperson.creditWeight 。可以显示所有的person特性。


图11. 复杂引用的结果


图12. 更复杂的引用的输入表单

returnMComplexQuote 方法的结果是person对象,它显示 person.name.titleperson.name.firstnameperson.name.lastnameperson.address.house numberperson.address.address1person.address.address2person.address.postcodeperson.address.countryperson.creditScoreperson.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联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款