[筆記][Biztalk]呼叫Web API取得回傳物件

通常呼叫GET HTTP method的RESTful API會取得API查詢的回傳物件,在Biztalk 2013內要怎麼接收呢?

 

例如,我寫了一個ASP.NET WebAPI,會依據所Request的Employee ID回傳Employee物件。Employee物件的定義如下:

public class Employee
{
    public string EmpName { get; set; }
    public string EmployeeID { get; set; }
}

在Biztalk中該怎麼做才能呼叫該Web API以取得Employee物件呢?在Biztalk專案中,要注意的

設定WCF-WebHttp Adapter

設定方式可以參考使用WCF-WebHttp Adapter呼叫Web API。其中要注意到的是,在Message頁籤中,Outbound Message區塊,要把GET寫上。以免Orchestration透過Send物件呼叫API時,帶入Message物件,卻導致Web API端無法辨識所需叫用的method。

建立回傳物件的XML Schema

Employee物件來說,透過WCF-WebHttp Adapter呼叫Web API,回傳的訊息內容會長類似這個樣子。主要是Namespace會依據Web API專案中的ProjectController而組成。

<Employee xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/LabRestful.Controllers">
	<EmpName>Employee A</EmpName>
	<EmployeeID>a456</EmployeeID>
</Employee>

所以,我們就要依據此XML設計對應的XML Schema。要注意的是,Target Namespace要記得跟XML的一樣,在這裡也就是"http://schemas.datacontract.org/2004/07/LabRestful.Controllers"

<?xml version="1.0" encoding="utf-16" ?> 
<xs:schema xmlns="http://schemas.datacontract.org/2004/07/LabRestful.Controllers" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://schemas.datacontract.org/2004/07/LabRestful.Controllers" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="EmpName" type="xs:string" /> 
        <xs:element name="EmployeeID" type="xs:string" /> 
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

建立RortType

因為我們所呼叫的Web API有回傳物件,我們需要接收以處理它,所以應該要建立Request-Response Port Type

透過WCF-WebHttp Adapter回傳的是帶有Emeployee型別定義的XML,所以我們可以用將回傳的Message Type設定為我們之前所建立的XML Schema定義的XSD檔

設定實體的Send Port

以上都規畫並設定好之後,即可Deploy至Biztalk上,並進行Port的設定。在呼叫Web API的Send Port上,由於是接收序列化成XML的Message,所以Receive pipeline要選擇XML Receive

以上就是呼叫Web API所需注意的處理方式。