【IT168 技术文章】
自从 Web Service 的概念出现以后,各 IDE 生产商纷纷将 Web Service 的开发组件加入到自己的 IDE 产品中去,并且随着 Web Service 的发展,各 IDE 生产商的 Web Service 开发组件的智能化程度也在不断地提高。IBM 最新推出的 Portlet 开发工具 WebSphere Portlet Factory (WPF) 中提供的 Web Service 功能部分,使得 Web Service 的创建和调用更加的便捷。
纵观各种 Web Service 开发工具,WPF 在 Web Service 的开发方面具有如下优点:
1. 界面化设计: 仅需书写少量的代码即可实现强大功能的 Web Service 的创建和 Web Service 的调用。
2. 入门简单: 开发者无需花费大量时间去学习 SOAP,WSDL,XML schema(xsd) 等 Web Service 技术。
3. 封装化设计:WPF 隐藏了 Web Service 的内部细节
4. Web Service 和 Portlets 的整合:WPF 实现了 Web Service 和 Portlets 的无缝连接,开发者无需进行复杂而又繁琐的各种配置,即可实现 Web Service 和 Portlets 的通信。
5. Web Service 调用接口丰富:WPF 几乎包含了当今流行的各种风格的 Web Service。
6. 缩短开发周期:WPF 的简单易用性能够大大的缩短 Web Service 的开发周期。
引言
本篇文章通过一个示例讲解了在 WPF 下如何进行 Web Service 的创建及工程的测试。
本文所讲解示例的开发及运行环境:
WebSphere Integration Developer (WID) 6.0.1 : 用来集成 WebSphere Portlet Factory,作为开发环境。WebSphere Portlet Factory 是一种开发组件,可以通过 Rational Software Development Platform(RSDP) 或 WebSphere Integration Developer(WID) 来作为其集成平台。
WebSphere Portal Server6.0: 用来作为项目的运行环境。
创建 Web Service
创建 Web Service,主要是通过 WPF 中的 Web Service Enable Builder 构建器来把使用 Method Builder 定义的一个或多个方法发布为 Web Service,并通过 Schema Builder 构建器来定义 Web Service 的输入输出参数。
创建 Web Service 的架构图:

创建新工程
首先创建一个 WPF 工程,将其命名为 TestCallService(详细步骤可参考 WebSphere Portlet Factory 快速开发入门 和 使用 WebSphere Portlet Factory 提升基于 SOA 架构的门户应用的时间价值,第 1 部分 : WebSphere Portlet Factory 简介 ),项目创建完成后 如图 2
图 2. 工程目录图

创建新模型(Model)
在创建的 TestCallService 工程中新建一个 WebSphere Portlet Factory Model,将其命名为 WebServiceModel,(详细步骤可参考 WebSphere Portlet Factory 快速开发入门 和 使用 WebSphere Portlet Factory 提升基于 SOA 架构的门户应用的时间价值,第 1 部分 : WebSphere Portlet Factory 简介 ),Model 创建完成后 如图 3
图 3. 模型(Model)目录图
构建器 (Builder) 的引用
本示例涉及如下构建器:
Method builder:用来创建 Web Service 所要完成的业务逻辑。
Schema builder:用来定义 Web Service 输入参数的数据结构。
Web Service Enable Builder:此 Builder 是 Web Service 的核心构建器,通过此 Builder 来暴露在 Model 中用 Method builder 定义的一个方法或多个方法为 Web Service 的接口方法。
(一)Method Builder
在 WebServiceModel 中新建一个 Method Builder, 如图 4
图 4. Builder 构建器
点击图中的增加 builder 按钮 ( 如图 4 中的红圈处 ),打开 Builder 引导器, 如图 5
图 5. Builder 引导器
如图所示,在 Builder type 中选择 Method,然后点击 OK 按钮,打开 Method Builder 编辑器, 如图 6
图 6. Method Builder 编辑器
如图所示:
(1) 在 Name 中输入方法名称 getQueryResult
(2) 在 Arguments 中输入参数名称 inputstr,并选择参数的数据类型为 IXml
(3) 在 Return Type 中选择返回值类型为 IXml
(4) 在 Method Body 中输入方法体,代码如 清单 1 所示,然后点击 Apply 按钮,保存此方法。
清单 1.
IXml result =null ; //define result value
try{
//use wpf API to initialize result.
result = XmlUtil.parseXml("<result><value></value></result>");
String target_str = "Hello,";//define String target_str to be disposed
if (inputstr!=null){
String param = inputstr.getText("query/arguments");//get arguments value
target_str = target_str+param; //merge target_str;
result.setText("result/value",target_str);//put merged target_str value into result
}
}catch(Exception e){
e.printStackTrace();
}
return result;
(二)Schema Builder
在 WebServiceModel 中新建一个 Schema Builder(新建方法请参考 Method builder 的创建),打开 Schema Builder 编辑器, 如图 7
图 7. Schema Builder 编辑器
如图所示:
(1) 在 Name 中输入 Schema 名称 query
(2) 在 Schema Source Type 中选择类型为 Existing URL/File
(3) 在 URL or Schema File Location 中,点击右边的选择按钮打开文件选择器, 如图 8
图 8. 文件选择器

选中 预先编写好 的 Schema 文件,然后点击 OK 按钮。本项目中的 Schema 文件放在了 models 目录下面。
注意: 选择的 Schema 文件 query.xsd 定义了 Web Service 的参数及返回值的数据结构,文件内容如 清单 2 所示:
清单 2.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://wbs.com" xmlns:xsd="http://www.w3.org
/2001/XMLSchema" targetNamespace="http://wbs.com"
elementFormDefault="unqualified"
attributeFormDefault="unqualified">
<xsd:element name="query">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="arguments" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="result">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
从此文件中可以看出一共定义有两个对象:query 和 result,query 对象中包含了一个 String 类型的 arguments 对象,result 对象中包含了一个 String 类型的 value 对象。
query 对象表示 WebServiceModel 中已经定义的方法 getQueryResult 所需要的输入参数的数据结构。
result 对象表示 WebServiceModel 中已经定义的方法 getQueryResult 所需要的返回值的数据结构。
(三)Web Service Enable Builder
在 WebServiceModel 中新建一个 Web Service Enable Builder(新建方法请参考 Method builder 的创建),打开 Web Service Enable Builder 编辑器, 如图 9
图 9. Web Service Enable Builder 编辑器
如图所示:
在进行 Web Service Enable 构建器的配置时,首先要确定待发布的 Web Service 的模式,即在编辑器中的 Advanced 栏目下选择 Web Service 的模式,本示例采用的是 Document-literal 模式,所以将 SOAP Style 选为 document,Encoding Style 选为 literal。
(1) 在 Name 中输入此构建器的名称 ExposeServiceEnable。
(2) 在 Method 中,从下拉菜单中选择要开放为 Web Service 的方法,此处选择已定义好的 getQueryResult() 方法。
(3) Reset NameSpace:按下此按钮将重新计算方法/服务名称空间。如果将模型移至一个新位置或重命名模型,则可能需要执行此操作。按下此按钮将强制构建器指向当前模型的路径和名称。
(4) Method Description:输入方法 ( 即服务提供的方法 ) 的描述信息。此处采用默认空值。
(5) Response Description:输入服务响应的描述信息。例如:“返回数据结构。”此处采用默认空值。
(6) Response SchemaPath:选择用于定义方法返回的数据的模式类型(或元素)。注意:如果显示为 RPC 样式,则通常指定类型。如果显示为文档文字,则指定元素。此处使用步骤(二)中创建的 schema 构建器 query 中的 query/result 对象,具体做法是:点击右边的选择按钮,打开 Schema 选择器, 如图 10
图 10. Schema 选择器
如图所示,选中 result,然后点击 OK 按钮
注意:不要选到 value 这一层。
(7) Return value name:RPC 样式响应通常与部分名称“return”一起返回。此输入字段允许您覆盖此部分名称,此处采用默认值 return。
(8) Arg1 Name(IXml):此 WebService 需要接受的参数,对于每个参数,在 WSDL 文档和服务调用构建器中输入标识此参数的名称。此处输入参数名称 inputstr,当然你也可以填写其他的名称。
(9) Arguments SchemaPath:选择用于定义方法返回的数据的模式类型(或元素)。注意:如果显示为 RPC 样式,则通常指定类型。如果显示为文档文字,则指定元素。此处使用步骤(二)中创建的 schema 构建器 query 中的 query/query 对象,具体做法是:点击右边的选择按钮,打开 schema 选择器, 如图 11
图 11. Schema 选择器

如图所示,选中 query,然后点击 OK 按钮
注意:不要选到 arguments 这一层。
(10) Arg1 Descripion:对于方法接受的每个参数,输入关于此参数的简短描述。此描述信息将用于 WSDL 文档中的参数注释。此处采用默认空值。
(11) 在 Header Information 下面的所有配置,都是对 SOAP 消息头进行的设置,此处将 MustUnderstand 设置为 Ignore。其余均采用默认值。
(12) Advanced:在 Web Service Enable 构建器讲解的开始部分已经对该选项进行了说明,请参阅本小节开始部分。
在所有的设置工作完成后,点击 Apply 按钮保存设置。最后点击工具条中的保存按钮保存工程。
(四)简单测试 Web Service
到此为止,Web Service 的创建已完成,下面我们简单测试一下 Web Service 是否创建成功。
(1) 启动 WebSphere Portal Server6.0
(2) 获得 WSDL 文件的地址, 如图 12
图 12. Model 目录图

选中 WebServiceModel.model,然后点击菜单中的 Model->Model settings….,打开 Model setting 窗口, 如图 13
图 13. Model 设置对话框
如图所示,将 URL to run this model via browser 中的地址拷出,然后在其后面连接上 /Action!getWSDL 字符串组成下面的 URL:
http://localhost:10038/TestCallService/webengine/WebServiceModel/Action/getWSDL
(3) 将组成的 URL 拷入 IE 浏览器的地址栏,点击 Enter 键。如果出现了下面的内容,说明 Web Service 开发、部署成功。 如图 14
图 14. 简单测试结果图
总结
本文向读者朋友讲解了在 WPF 下工程的创建,模型的创建,Web Services 的创建,工程的测试及 Web Services 的一些相关知识。请读者朋友结合附件中给出的源码l来阅读此文章,并且自己动手构建一个实验的例子,这样更能深入的理解此篇文章。