共用方式為


使用 SAP 配接器的 WCF 通道模型概觀

若要叫用 SAP 系統上的 RFC、TRFC 或 BAPI,或將 IDOCS 傳送至 SAP 系統,您的程式碼會作為 WCF 用戶端,並將輸出作業傳送至配接器。 在 WCF 通道模型中,您的程式碼會透過通道傳送要求訊息,以叫用配接器上的作業。

若要作為 SAP 系統的 tRFC 或 RFC 伺服器,您的程式碼會以 WCF 服務的形式運作。 也就是說,配接器會在程式碼上叫用輸入作業,例如 RFC 或 ReceiveIdoc 作業 (,以字串格式從 SAP 系統接收 IDOC) 。 在此案例中,您的程式碼會透過配接器透過通道接收作業的要求訊息。

本節中的主題提供搭配 WCF 通道模型使用 SAP 配接器的概觀。

WCF 通道模型概觀

用戶端和服務會交換 SOAP 訊息來通訊。 WCF 通道模型是這個訊息交換的低階抽象概念。 它提供介面和類型,可讓您使用稱為通道堆疊的分層通訊協定堆疊來傳送和接收訊息。 堆疊的每一層都是由通道所組成,而且每個通道都是從 WCF 系結建立。 在最低層是傳輸通道。 傳輸通道會實作服務與用戶端之間的基礎傳輸機制,並將每個訊息呈現給較高層 (,最後取用的應用程式) 為 System.ServiceModel.Message。 WCF 訊息 類別是 SOAP 訊息的抽象概念。 WCF 提供數個通道介面,稱為通道圖形,可建立基本 SOAP 訊息交換模式的模型,例如要求-回復或單向。 WCF 傳輸系結提供一或多個通道圖形的實作,較高層可用來傳送和接收訊息。 如需 WCF 通道模型的詳細資訊,請參閱 通道模型概觀

SAP 配接器是 WCF 自訂傳輸系結,會將 SAP 系統公開為 WCF 服務。

SAP 配接器支援的通道圖形

配接器會實作下列 WCF 通道圖形:

  • IRequestChannel (System.ServiceModel.Channels.IRequestChannel) 。 IRequestChannel介面會實作要求-回復訊息交換的用戶端。 您可以使用 IRequestChannel 來執行您想要取用回應的作業,例如在傳回資料的 SAP 系統上叫用 RFC。

  • IOutputChannel (System.ServiceModel.Channels.IOutputChannel) 。 此圖形會實作單向訊息交換的用戶端。 您可以使用 IOutputChannel 來叫用不需要取用回應的作業,例如,在未傳回任何資料的 SAP 系統上叫用 RFC。

  • IReplyChannel (System.ServiceModel.Channels.IReplyChannel) 。 此圖形會實作要求-回復訊息交換的服務端。 您可以使用 IReplyChannel 來實作 RFC 或 tRFC 伺服器,或從 SAP 系統接收IDOC。

    就像任何 WCF 系結一樣,SAP 配接器會使用處理站模式來提供通道給應用程式程式碼。 您可以使用 Microsoft.Adapters.SAPBinding 物件來建立下列專案的實例:

  • System.ServiceModel.ChannelFactory <IRequestChannel >提供IRequestChannel通道,可用來叫用配接器上的要求-回應作業。

  • System.ServiceModel.ChannelFactory <IOutputChannel >提供IOutputChannel通道,可用來叫用配接器上的單向作業。

  • System.ServiceModel.IChannelListener <IReplyChannel 提供 IReplyChannel >通道,可讓您用來從配接器接收要求-回應作業。

在 WCF 通道模型中建立 SAP 配接器的訊息

在 WCF 中, System.ServiceModel.Channels.Message 類別會在 SOAP 訊息的記憶體表示中提供 。 您可以叫用靜態Message.Create方法來建立Message實例。

SOAP 訊息有兩個重要部分,您必須在建構 訊息 實例以傳送至 SAP 配接器時指定。

  • 訊息動作是 SOAP 訊息標頭的一部分字串。 訊息動作會識別應在 SAP 配接器上叫用的作業。 以下顯示指定用來在 SAP 系統上叫用 SD_RFC_CUSTOMER_GET RFC 的訊息動作: http://Microsoft.LobServices.Sap/2007/03/Rfc/SD_RFC_CUSTOMER_GET

  • 訊息本文包含作業的參數資料。 訊息本文是由格式正確的 XML 所組成,對應至 SAP 配接器所預期的訊息架構,以供要求的作業使用。 下列訊息本文包含 SAP 系統上SD_RFC_CUSTOMER_GET RFC 的參數。

    <SD_RFC_CUSTOMER_GET xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\"> <KUNNR i:nil=\"true\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"> </KUNNR> <NAME1>AB*</NAME1> <CUSTOMER_T> </CUSTOMER_T> </SD_RFC_CUSTOMER_GET>  
    

    如需作業的 SAP 配接器訊息架構和訊息動作的相關資訊,請參閱 BizTalk Adapter for mySAP Business Suite 的訊息和訊息架構

    Message.Create方法已多載,並提供許多不同的選項來提供訊息本文。 下列程式碼示範如何使用System.Xml 建立 訊息 實例 。XmlReader 提供訊息本文。 在此程式碼中,訊息本文是從字串常數讀取。

//create an XML message to send to the SAP system  
//We are invoking the SD_RFC_CUSTOMER_GET RFC.  
//The XML below specifies that we want to search for customers with names starting with "AB"  
string inputXml = "<SD_RFC_CUSTOMER_GET xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\"> <KUNNR i:nil=\"true\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"> </KUNNR> <NAME1>AB*</NAME1> <CUSTOMER_T> </CUSTOMER_T> </SD_RFC_CUSTOMER_GET>";  
  
//create an XML reader from the input XML  
XmlReader reader = XmlReader.Create(new MemoryStream(Encoding.Default.GetBytes(inputXml)));  
  
//create a WCF message from the XML reader  
Message inputMessge = Message.CreateMessage(MessageVersion.Soap11, "http://Microsoft.LobServices.Sap/2007/03/Rfc/SD_RFC_CUSTOMER_GET", reader);  

重要

您必須在訊息實例中提供 訊息 動作。 這通常是在 建立訊息 實例時完成。

WCF 通道模型中 SAP 配接器上的串流支援

如何建立及取用您與 SAP 配接器交換的訊息,會決定訊息如何在程式碼與配接器之間串流處理。

節點串流

節點串流是 SendIdoc 和 ReceiveIdoc 作業以外的所有作業唯一支援的串流層級。

若要執行訊息的節點串流,您可以:

  • 使用 XmlReader 建立輸出訊息,以提供訊息本文。

  • 使用 XmlReader取用輸入訊息。 您可以在輸入訊息上呼叫GetReaderAtBodyContents方法,以取得讀取器。

節點值串流

由於 SendIdoc 和 ReceiveIdoc 作業在單一 XML 節點底下包含 IDOC 資料, < (idocData >) ,因此配接器支援這些作業上的節點值串流。

若要執行這些作業的節點值串流,您可以:

  • 使用實作節點值串流來提供訊息本文的 BodyWriter ,建立 SendIdoc 要求訊息 (輸出) 。

  • 使用實作節點值串流的XmlDictionaryWriter,在訊息上呼叫WriteBodyContents方法,以取用 ReceiveIdoc 要求訊息 (輸入) 。

    如需使用 WCF 通道模型串流一般檔案 (字串) IDOC 的詳細資訊,請參閱 使用 WCF 通道模型在 SAP 中串流 Flat-File IDOC

另請參閱

使用 WCF 通道模型開發應用程式