使用WSO2 ESB将POST RESTful消息传递给WCF代理

时间:2013-04-17 15:44:34

标签: wcf rest wso2 wso2esb

我是WS02 ESB的新手 - 我的公司几个月前实现了它。

目前,我正在尝试将REST层放在WCF服务的顶部。我试图实现的用例是一个位置api,其中移动应用程序(iphone,android)通过RESTful xml向WCF服务提供位置数据。

我当前的数据流结构类似于移动应用程序 - > REST API - > ESB代理 - > WCF服务。

在有效负载中提供给REST端点的xml是:

<Location Partner='{API Parnert Name}' Code='{API Partner Code}' Password='{API Partner Password}' Generated='2013-04-16T16:30:15Z'>
  <Latitude>44.5881</Latitude>
  <Longitude>-89.581248</Longitude>
  <Accuracy>75.334</Accuracy>
  <MobileDeviceUID>A1000017B8B437</MobileDeviceUID>
</Location>

为了通过WSO2 ESB路由这个xml,我创建了一个API和一个服务代理。 (一切都在我的机器上本地运行)

API的配置如下:

<api xmlns="http://ws.apache.org/ns/synapse" name="API_LOC" context="/WS1/Location">
   <resource methods="POST">
      <inSequence>
         <log level="full" category="DEBUG"/>
         <send>
            <endpoint>
               <address uri="http://localhost:8280/services/WS1LocationProxy/AddLocation" format="soap11"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <send/>
         <log level="full"/>
      </outSequence>
   </resource>
</api>

我的代理配置如下:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="WS1LocationProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="full" category="TRACE"/>
         <property name="FORCE_HTTP_1.0" value="true" scope="axis2"/>
         <send>
            <endpoint>
               <address uri="http://localhost:54270/WS1LocationService.svc"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </target>
   <publishWSDL uri="http://localhost:54270/WS1LocationService.svc?wsdl"/>
   <parameter name="useOriginalwsdl">true</parameter>
   <parameter name="interface">WS1LocationService</parameter>
   <parameter name="serviceType">proxy</parameter>
   <description></description>
</proxy>

我的主要问题是:如何将传入REST请求的POST有效负载转换为代理中WCF服务所需的SOAP信封。我无法找到这样一个过程的好例子。

1 个答案:

答案 0 :(得分:1)

您不需要手动转换它。传入的POST请求将转换为SOAP消息,以便在ESB中进行处理。 您可以使用代理中的日志介体来检查它。 在insequence..just使用日志中介并看到输出..

<log level="full" >
   <property name ="incoming message" value="*****"/>
</log>