websphere使用
SOA的主要目标是将服务请求者和服务提供者进行松散耦合。 将服务实现与服务接口分离是一个步骤,因此更改提供程序的服务实现不需要对服务请求者进行任何更改。 但是服务端点呢?使用服务描述(WSDL)提供的静态端点意味着在传输级别耦合请求者和提供者:
图1.运输级耦合
每当服务提供者的物理端点发生更改时,每个服务使用者都必须在其应用程序逻辑中反映更改。 更好的解决方案是使用中介程序来拦截服务调用并将其路由到适当的端点。 从特定于传输的信息进行抽象以在服务使用者和提供者之间具有透明的中介层是企业服务总线(ESB)模式的一方面。 通过充当这样的中间层,WebSphere DataPower SOA设备及其Web服务代理组件可以成为ESB实现的一部分。 通过引用WS-Proxy组件中的WSDL文件并向使用者提供静态服务端点,以静态方式实现ESB层的这一部分,可以在对实际服务端点进行更改时提供一个控制点,从而简化了对ESB层的管理。服务端点。 通过这种方法,服务使用者在传输级别上与提供者分离了,但是当在提供者端点上进行更改时,仍然需要在代理端进行更改。
图2.与WS-Proxy分离
在服务代理中使用DataPower的WebSphere Service Registry and Repository订阅功能,而不是静态引用WSDL文件,是获得更动态的服务中介的方法。 DataPower可以订阅WSDL文件或WebSphere Service Registry and Repository中存储的其他工件,并通过轮询自动或从外部手动驱动与更改同步。 从服务端点管理的角度来看,此方法提供了一种灵活而动态的ESB层功能,该功能可自动反映对端点的更改,而无需在服务使用者或ESB端进行更改:
图3.使用WS-Proxy的动态解耦
本文介绍了如何使用WebSphere Service Registry and Repository和DataPower设置这样的动态Web服务代理。 本文首先描述了基本配置-如何设置WS-Proxy并将其连接到WebSphere Service Registry and Repository以订阅服务定义。 然后,本文介绍了错误处理,模式验证以及如何在DataPower的WS-Proxy组件中实现它们。
先决条件
设置所描述的场景需要满足以下先决条件:
-
固件版本为V3.6.0.8或更高版本的WebSphere DataPower SOA设备
- 本文使用的固件为V3.6.0.14的DataPower XI50设备。 WSRR订阅功能在V3.6.0.8中引入。 WebSphere Service Registry and Repository V6.0或更高版本
- 本文使用WebSphere Service Registry and Repository V6.0.0.2,但DataPower订阅也适用于早期和更高版本。 WebSphere Service Registry and Repository V6.1将于2008年第一季度推出。 Web服务请求者应用程序
- 您拥有Web服务请求者应用程序,或者可以使用WebSphere Integration Developer V6或Rational Application Developer V6或V7的Web服务浏览器功能。 Web服务提供商应用程序
- 只要拥有相应的WSDL文件,就可以使用任何Web服务。 您可以在下面下载示例Web服务应用程序,并将其部署在WebSphere Application Server V6.0或更高版本上。 WebSphere Service Registry and Repository在WebSphere Application Server V6.0.2.17之上运行,因此,如果您可以免费访问此WebSphere Service Registry and Repository安装,则可以使用它来托管Web服务应用程序。 该示例应用程序包含一个简单的Web服务,称为Order Service。 请求数据类型是订单对象,由客户对象和1:n商品对象组成。 如果没有错误发生,订单服务将以包含订单ID的订单确认响应。 该订单ID在服务实现中采用硬编码,因此值始终相同。
WebSphere Service Registry and Repository配置
在开始在DataPower中配置WS-Proxy之前,必须先在WebSphere Service Registry and Repository中注册要订阅的Web服务,如下所述。
上传文件
要在WSSR中注册Web服务,请通过管理控制台上载WSDL及其所有从属XSD,如下所示。 管理控制台通过Web界面提供-要访问它,使用浏览器并输入WebSphere Service Registry and Repository安装的URL。 管理控制台的URL具有以下结构: http://<hostname>:<port_number>/ServiceRegistry
。 例如: http://localhost:9080/ServiceRegistry
。
图4. XSD依赖性
客户的minOccurs属性,并将order元素设置为1,这意味着在每个订单请求中都需要这些对象。 稍后,您将使用该事实在Web服务代理中引起验证错误。
-
登录到管理控制台
输入您的WebSphere Service Registry and Repository安装的URL。 登录屏幕打开时,使用您的凭据登录。 如果您尚未配置安全性,则将您转发到管理控制台:
图4a。 WSRR管理控制台
-
上载XSD文件。
在“ 服务文档”下,转到“ XSD文档”并通过单击“ 加载文档”并按照说明上载
Item.xsd
,Customer.xsd
和Order.xsd
。 除了提供要上传的数据类型的描述之外,还可以提供版本号(例如1.0
(或将其保留为空白)。 XSD文档页面应如下所示:图5. XSD导入
-
上载WSDL文件。
成功上传XSD文档后,您可以上传WSDL文件。 在“ 服务文档”下,转到“ WSDL文档”并以与处理XSD文档相同的方式上载WSDL。 您的WSDL文档页面应显示WSDL文件:
图6. WSDL导入
您现在已经在WSRR中注册了订购服务,因此现在可以使用DataPower查询该服务定义。
WS-Proxy配置
在此步骤中,您将配置DataPower设备。 首先,登录到设备和您的域( 图6a )。 在创建Web服务代理之前,必须定义Http Front Side Handler对象和WSRR Server对象,这两个对象都将由Web服务代理使用。 Http前端处理程序对象将侦听特定的URL,并将发送到该URL的HTTP请求路由到Web服务代理服务。 WSRR服务器对象是要用于订阅服务定义的WSRR的定义。
图6a。 DataPower登录
准备配置对象
下一节向您展示如何创建和配置Web服务代理服务使用的对象:
-
WSRR服务器对象
在DataPower Web GUI的左侧导航窗格下,导航到“ 对象”部分,然后在“ 配置”部分中单击“ WSRR服务器 ”。 将打开所有WSRR服务器定义的列表。 单击添加以定义新的WSRR服务器:
图7. WSRR服务器配置
为您的WSRR服务器分配一个名称,例如
MyWSRRServer
。 在SOAP URL字段中,将主机名和端口号替换为WSRR安装的值。 当您在没有安全性的情况下运行WSRR时,您的协议将是HTTP。 在启用安全性的情况下运行WSRR时,请提供SSL代理配置文件,用户名和密码。 有关如何配置SSL代理配置文件的信息,请参阅DataPower文档。 点击应用 。 Web GUI切换回WSRR服务器列表,其中应显示WSRR服务器定义。 -
HTTP前端处理程序
不必通过以下方式定义HTTP前端处理程序。 在创建Web服务代理期间,您将能够选择默认的HTTP前端处理程序。 无论如何,您都必须将此默认的HTTP Frontside Handler更改为您的要求。 在DataPower Web GUI的左侧导航窗格下,导航到“ 对象”部分,然后在“ 协议处理程序”子部分中找到“ HTTP前端处理 程序”链接。 单击此链接后,将显示带有所有HTTP前端处理程序定义的列表。 单击添加以定义新的HTTP前端处理程序。 您可以保留所有默认值。
在名称字段中,例如选择
MyHTTPFrontsideHandler
作为新处理程序的名称。 作为本地IP地址,选择一个以太网接口的IP地址。 您可以在“ 状态”,“ IP网络”,“以太网接口”下的右侧导航窗格中找到此IP地址。 如果保留默认值0.0.0.0,则将在所有已配置的以太网接口上访问HTTP Frontside Handler。 在“ 端口号”下,填写DataPower设备尚未使用的端口,例如9080
。 如果您希望能够在浏览器中使用?wsdl
检索订购服务的新WSDL(由WS-Proxy生成),则还必须启用HTTP GET方法。 设置如下:图7a。 HTTP前端处理程序配置
将配置保存在Web GUI的右上角:单击保存配置 。
图7b
设置WS-Proxy服务
为了创建一个新的Web服务代理,单击“ 控制面板”上的Web服务代理图标:
图8. DataPower控制面板
- 指定Web服务代理对象的名称,然后选择添加WSDL文件的方式。 为了能够订阅存储在WSRR中的服务定义,请选择Add WSRR Subscription :
图9. WS-Proxy配置
- 将HTTP前端处理程序和WSRR服务器对象添加到Web服务代理服务。 选择先前创建的WSRR服务器和HTTP前端处理程序。 另外,表1中的设置也必须应用到配置页面。
属性 值 WSRR订阅名称 我的服务订阅 WSRR服务器 MyWSSRServer 订阅对象 WSDL文件 命名空间 http://wsrr.integration/orderservice 对象名称 OrderService.wsdl 本地端点处理程序 MyHTTPFrontsideHandler 本地URI / services / OrderService 现在,您的配置应如下所示:
图10. WS-Proxy订阅
确认设置后,通过点击保存配置 , 将配置保存在Web GUI的右上方。
验证订阅状态
首先检查WSRR订阅的状态。 在左侧导航窗格的“ 状态”下 ,您可以在“ Web服务”子部分下找到“ WSRR订阅状态”和“ WSRR订阅服务状态 ”。 单击两者,然后检查状态和检索到的信息。 当一切正常时,两个状态表应如图10a和10b所示:
图10a。 WS-Proxy订阅服务状态
图10b。 WS-Proxy订阅服务状态
验证端点信息
现在检查DataPower是否已从WSRR中检索到正确的端点信息。 返回“ 状态”部分,然后在“ Web服务”子部分下,单击“ Web Service操作” 。 将有一个包含所有当前注册的Web Service操作的表。 右边的最后一列显示了后端地址,这是DataPower从WSRR中的服务定义中检索到的服务端点。 图10c显示了该表的最后两列。
图10c。 Web服务操作
测试WS-Proxy
现在,Web服务代理已准备好进行首次测试。 Web服务的新外部端点是HTTP前端处理程序的本地IP地址和端口号 ,后跟WSRR订阅的本地URI ( http:// <EthernetInterfaceIP>:9080 / services / OrderService )。 您可以使用任何Web服务客户端将有效的SOAP请求发送到Web服务代理的终结点。 为了更好地了解发生了什么,您可以使用TCP / IP监视器来检查SOAP请求和SOAP响应。 为了发送SOAP请求并检查SOAP响应,您还可以使用WebSphere Integration Developer或Rational Application Developer的 Web Service Explorer中的构建。 您可以发送任何订单信息,只要您的订单中至少有一个必需的订单对象和一个必需的客户对象即可。
清单1.有效SOAP请求的样本
<?xml version="1.0 encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:q0="http://wsrr.integration/orderservice"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<q0:placeOrder>
<order>
<customer>
<firstName>Peter</firstName>
<LastName>Jones</LastName>
<id>2838382128</id>
</customer>
<items>
<articleID>837228304</articleID>
<quantity>3</quantity>
</items>
<items>
<articleID>8272666333</articleID>
<quantity>4</quantity>
</items>
</order>
</q0:placeOrder>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
清单2.对有效SOAP请求的响应
<?xml version="1.0 encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<q0:placeOrderResponse xmlns:q0="http://wsrr.integration/orderservice">
<orderID>ID_123456</orderID>
</q0:placeOrder>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
现在,您可以尝试发送没有以下必需对象之一的请求。 Web服务代理将根据WSDL和XSD文件提供的模式来验证每个SOAP请求。 将无效请求发送到该框时,结果将是“内部服务器错误”响应。
清单3.无效的SOAP请求的样本
<?xml version="1.0 encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:q0="http://wsrr.integration/orderservice"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<q0:placeOrder>
<order>
<customer>
<firstName>Peter</firstName>
<LastName>Jones</LastName>
<id>2838382128</id>
</customer>
</order>
</q0:placeOrder>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
清单4.对无效的SOAP请求的响应
<?xml version="1.0 encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>General</faultcode>
<faultstring>Internal Error</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
要查看系统日志,请转到右侧导航窗格上的状态,系统日志 。 查看DataPower的系统日志时,您会看到Schema Validation Error,该无效请求导致了图11:
图11.系统日志
当所有这些测试都能正常工作时,您的WS-Proxy已被完全配置。 对于遇到任何问题的情况,下一节将介绍如何调试WS-Proxy。
故障排除
当您的Web服务代理无法按预期运行并且出现运行时错误时,有两个调试选项:
系统日志
您可以查看上面显示的系统日志。 您可以通过进入“ 控制面板”并选择“ 故障排除”来更改系统日志的日志级别。 在“ 日志记录”下,将日志级别更改为要debug
级别 ,然后单击“ 设置日志级别”按钮。 调试将是最精细的级别:
图12.设置日志级别
探测
如果系统日志不够详细,并且您可以识别引发错误的组件,则可以在其中放入探针 。 要将探测添加到Web服务代理服务,请转到控制面板,然后单击WSProxy => MyWebServiceProxy :
图13.启用探针
单击显示探针=>启用探针 。 激活了此特定Web服务代理对象的详细日志:
图14. Probe窗口
单击刷新时,您可以在当前窗口(发送下一个请求之后)上看到此日志。 有关如何在DataPower中使用探针的信息,请参阅文档。 调试后禁用探针,因为它们会占用大量系统资源。
高级配置和故障处理
本节描述如何对Web服务代理进行更细粒度的配置以及如何实现更复杂的故障处理。 DataPower Web服务代理服务利用了更多的功能和配置功能,而不仅仅是侦听特定的HTTP端点并转发传入的SOAP调用。 你可以看到在你的Web服务代理 配置Web服务代理部分的各种可能性。
配置验证行为
如上所述,DataPower Web服务代理服务针对WSDL文件验证传入请求。 您可以更改每个Web服务甚至每个操作或端口的验证行为。
- 要配置消息验证,请转到“ Web服务代理配置”页面的“ 策略”选项卡:
图15. WS-Proxy配置
- 从订阅对象开始,您可以将树扩展到操作级别。 在每个级别上,您可以通过单击绿色图标来配置验证行为:
图16.验证设置
- 您不仅可以强制执行SOAP请求的验证。 您可以强制验证其他SOAP消息类型,例如SOAP响应和SOAP错误消息。 也可以验证SOAP标头和其他一些设置,例如启用WS-Addressing:
图17.验证设置的详细信息
高级故障处理
将内部服务器错误形式的SOAP错误发送回客户端不是很有意义。 特别是当错误的根本原因是客户端的请求时,返回更详细的故障消息将更加有益。 退回验证错误而不是内部服务器错误将为客户端提供有关其请求有问题的信息。 下一节将介绍如何设置Web服务代理服务,该服务将SOAP错误消息中的验证错误信息发送回客户端。 这可以通过向Web服务代理策略处理规则中添加OnError操作来实现。 您可以将此OnError规则添加到默认请求规则中,也可以添加到Order Service特定级别的特定规则中。 如果有多个服务订阅,则可以在必要时将OnError或任何其他操作添加到其中一个服务中。 在这里,我们将OnError操作添加到Web服务代理的默认请求规则中。 在处理规则中的特定点添加错误动作,意味着该规则中包含的以下任何处理步骤(动作)引起故障时,都会触发错误动作。 为此,请单击链接MyWebServiceProxy_default_request_rule 。 您将看到以下屏幕:
图18.默认请求规则
样式表准备
- 在配置默认请求规则之前,我们必须创建XSLT样式表,该样式表将提取故障信息并将其稍后放入SOAP故障消息中。 DataPower带有一些DataPower特定的XSLT扩展功能。 我们必须使用此扩展功能之一从内置服务变量之一中提取故障信息。 这可以通过使用dp:variable()扩展功能来完成。 提取故障信息后,即可构建SOAP故障。 清单5显示了样式表:
清单5.样式表代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:dp="http://www.datapower.com/extensions" extensions-Element-prefixes="dp"> <xsl:variable name="error" select="dp:variable('var://service/error-message')"/> <xsl:template match="/"> <soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Header /> <soapenv:Body> <soapenv:Fault> <faultcode xmlns:p618="http://wsrr.integration/orderservice"> p618:placeOrder_orderFailurefMsg </faultcode> <faultstring>integration.wsrr.PlaceOrder_orderFailurefMsg</faultstring> <detail encodingStyle=""> <p618:placeOrder_orderFailuref xmlns:p618="http://wsrr.integration/orderservice"> <xsl:value-of select="$error"/> </p618:placeOrder_orderFailuref> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> </xsl:template> </xsl:stylesheet>
- 通过文本编辑器或开发工具创建XSLT文件后,必须将文件上传到设备。 再次转到Web GUI,然后在左侧导航窗格的“ 管理”部分下或在“ 控制面板”上选择“ 文件管理” 。 在本地存储的“ 操作...”菜单下,单击“ 上传文件” :
图19.上传文件
规则配置
现在,必须配置请求规则和新的错误规则,以进行一种try and catch错误处理。
- 转到默认请求规则( 图18 ),然后将“ 高级”图标拖到“ 匹配”操作的后面(从左到右窗体)。 双击新的黄色方形高级图标:
图20.高级操作
- 激活错误错误单选按钮,然后单击下一步 。 现在,将出现错误操作的配置向导。 在此配置页面上,必须指定哪些数据用于输入错误规则,哪些数据用作输出。 在DataPower中,此数据容器称为上下文 。 因为我们要构建新的SOAP Fault消息,所以我们可以使用任何输入,但必须使用OUTPUT上下文进行输出,因为错误操作处理的结果将写入此OUTPUT上下文。 因此,将
(auto)
指定为错误操作的输入 ,并将OUTPUT
为output 。 错误模式将abort
因为我们不想更正错误并继续,但是放弃请求并将错误发送回客户端。 点击完成 :图21.错误操作配置
- 之后,必须定义处理规则。 此规则确定触发错误规则时必须采取的措施。 因此,单击+号以创建新的处理规则。 将新处理规则
MyErrorRule
然后选择error-rule
作为Rule Direction 。 现在,向该规则添加一个动作,该动作将执行先前创建的XSL样式表。 单击右下角的+号,并将操作命名为MyErrorAction
。 选择xform
作为操作类型,然后在“ 转换”字段中使用您最近上传的样式表。 输入为INPUT
, 输出为OUTPUT
。 现在,您可以通过按Apply或Done来保存所有打开的窗口。 设置如下:图22.转换错误操作
- 不要忘记将更改也应用到策略配置页面左上角的策略,现在它应如下所示:
图23.带有错误处理的规则
现在,您应该保存配置并通过发送无效的SOAP请求来测试更改。 SOAP Fault消息不应再是“内部服务器错误”,而应是有关验证错误的详细信息。
结论
完成上述配置工作之后,您现在拥有一个动态Web服务代理,它可以预订存储在WebSphere Service Registry and Repository中的服务描述。 除了更灵活地将服务使用者和提供者分离之外,DataPower中的WS-Proxy组件还支持许多其他服务中介。 有关更多信息,请参见下面的“ 相关主题” 。 例如,WS-Proxy可以充当XML防火墙,服务级别监视器和安全策略实施点:
- XML防火墙可以使用其XML威胁防护机制保护服务托管系统免受XML攻击,并可以在消息发送到提供者之前验证消息的模式一致性(模式验证部分已在本文中实现)。 在提供者端进行此工作会导致主机上不必要的负载,并且在诸如DataPower之类的优化设备上效率更高。
- Web服务代理组件可以充当安全策略实施点。 您不仅可以使用代理对提供者域中的主叫用户进行身份验证和授权,还可以使用DataPower AAA框架来映射使用方和提供者域中的各种安全凭证或令牌。
- 监视和管理服务也可以在代理上完成,例如测量去往该服务的流量并触发适当的操作。 为此,设备提供了服务水平监控(SLM)组件。
本文介绍了DataPower功能以及WebSphere Service Registry and Repository。 您还可以在WebSphere Service Registry and Repository上使用更复杂的功能以获得更大的灵活性。 例如,您可以通过在“概念”中对工件进行分组来创建从技术工件(例如WSDL和XSD文件)中抽象的本体。 DataPower还可以订阅此概念,而不是直接订阅服务描述(WSDL文件)。 有关这些WebSphere Service Registry and Repository功能的更多信息,请参阅产品文档。
翻译自: https://www.ibm.com/developerworks/websphere/library/techarticles/0802_rohmann/0802_rohmann.html
websphere使用