2013-04-17 33 views
0

我對WS02 ESB相當陌生 - 我的公司幾個月前實施了它。通過WSO2 ESB向WCF Proxy傳遞POST RESTful消息

目前,我試圖把一個REST層放在WCF服務的頂部。我試圖實現的用例是移動應用程序(iphone,android)通過RESTful xml向WCF服務提供位置數據的位置api。

我目前的數據流結構像移動應用程序 - > 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> 

爲了路線此xml通過WSO2 ESB我已經創建了一個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

你不需要手動變換it..Incoming POST請求,ESB將被轉換爲SOAP消息處理.. 您可以檢查與日誌中介在代理.. 在insequence..just使用一個日誌調解員,看到輸出..

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

謝謝你。這讓我對正在通過的數據有了一些瞭解。從我可以告訴我將需要改變一些數據。進入REST api的傳入SOAP消息與我嘗試與之通信的WCF服務所需的SOAP消息不匹配。核心xml數據是相同的(在節點內),但是需要將其包裝在Action中以便WCF代理理解調用 - 除非我不正確地理解SOAP。 – keannan5390

+1

在序列中,您必須定義您的中介邏輯..有多少個樣本,在ESB文檔中,這對您有所幫助。 – Ratha

+0

是的,我能夠確定這一點。我大多完成了中介邏輯。 – keannan5390