다음을 통해 공유


SAP 어댑터를 사용하여 WCF 채널 모델 개요

SAP 시스템에서 RFC, tRFC 또는 BAPI를 호출하거나 IDOCS를 SAP 시스템으로 보내려면 코드가 WCF 클라이언트 역할을 하고 아웃바운드 작업을 어댑터로 보냅니다. WCF 채널 모델에서 코드는 채널을 통해 요청 메시지를 전송하여 어댑터에서 작업을 호출합니다.

SAP 시스템에 대한 tRFC 또는 RFC 서버 역할을 하려면 코드가 WCF 서비스로 동작합니다. 즉, 어댑터는 코드에 대한 인바운드 작업(예: RFC 또는 ReceiveIdoc 작업)을 호출합니다(SAP 시스템에서 문자열 형식으로 IDOC 수신). 이 시나리오에서 코드는 어댑터에서 채널을 통해 작업에 대한 요청 메시지를 받습니다.

이 섹션의 topics WCF 채널 모델에서 SAP 어댑터를 사용하는 방법에 대한 개요를 제공합니다.

WCF 채널 모델 개요

클라이언트와 서비스는 SOAP 메시지를 교환하여 통신합니다. WCF 채널 모델은 이 메시지 교환의 하위 수준 추상화입니다. 채널 스택이라는 계층화된 프로토콜 스택을 사용하여 메시지를 보내고 받을 수 있는 인터페이스 및 형식을 제공합니다. 스택의 각 계층은 채널로 구성되며 각 채널은 WCF 바인딩에서 만들어집니다. 가장 낮은 계층에는 전송 채널이 있습니다. 전송 채널은 서비스와 클라이언트 간의 기본 전송 메커니즘을 구현하고 각 메시지를 더 높은 계층(그리고 궁극적으로 소비하는 애플리케이션)에 System.ServiceModel.Message로 제공합니다. WCF 메시지 클래스는 SOAP 메시지의 추상화입니다. WCF는 요청-회신 또는 단방향과 같은 기본 SOAP 메시지 교환 패턴을 모델링하는 채널 셰이프라고 하는 여러 채널 인터페이스를 제공합니다. WCF 전송 바인딩은 더 높은 계층이 메시지를 보내고 받는 데 사용할 수 있는 하나 이상의 채널 셰이프 구현을 제공합니다. WCF 채널 모델에 대한 자세한 내용은 채널 모델 개요를 참조하세요.

SAP 어댑터는 SAP 시스템을 WCF 서비스로 노출하는 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 메시지의 메모리 내 표현을 제공합니다. static Message.Create 메서드를 호출하여 메시지 instance 만듭니다.

SAP 어댑터로 보낼 메시지 instance 생성할 때 지정해야 하는 SOAP 메시지에는 두 가지 중요한 부분이 있습니다.

  • 메시지 작업은 SOAP 메시지 헤더의 일부인 문자열입니다. 메시지 작업은 SAP 어댑터에서 호출해야 하는 작업을 식별합니다. 다음은 SAP 시스템에서 http://Microsoft.LobServices.Sap/2007/03/Rfc/SD_RFC_CUSTOMER_GETSD_RFC_CUSTOMER_GET RFC를 호출하도록 지정된 메시지 동작을 보여줍니다.

  • 메시지 본문에는 작업에 대한 매개 변수 데이터가 포함됩니다. 메시지 본문은 요청된 작업에 대해 SAP 어댑터가 예상하는 메시지 스키마에 해당하는 올바른 형식의 XML로 구성됩니다. 다음 메시지 본문에는 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 어댑터 메시지 스키마 및 메시지 작업에 대한 자세한 내용은 MySAP Business Suite용 BizTalk 어댑터에 대한 메시지 및 메시지 스키마를 참조하세요.

    Message.Create 메서드는 오버로드되며 메시지 본문을 제공하기 위한 다양한 옵션을 제공합니다. 다음 코드에서는System.Xml 사용하여 메시지 instance 만드는 방법을 보여줍니다 . 메시지 본문을 제공하는 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);  

중요

메시지 instance 메시지 작업을 제공해야 합니다. 이 작업은 일반적으로 메시지 instance 만들 때 수행됩니다.

WCF 채널 모델의 SAP 어댑터에 대한 스트리밍 지원

SAP 어댑터와 교환하는 메시지를 만들고 사용하는 방법은 코드와 어댑터 간에 메시지를 스트리밍하는 방법을 결정합니다.

노드 스트리밍

노드 스트리밍은 SendIdoc 및 ReceiveIdoc 작업을 제외한 모든 작업에 대해 지원되는 유일한 스트리밍 수준입니다.

메시지에 대한 노드 스트리밍을 수행하려면 다음을 수행합니다.

  • XmlReader를 사용하여 아웃바운드 메시지를 만들어 메시지 본문을 입력합니다.

  • XmlReader를 사용하여 인바운드 메시지를 사용합니다. 인바운드 메시지에서 GetReaderAtBodyContents 메서드를 호출하여 판독기를 가져옵니다.

노드 값 스트리밍

SendIdoc 및 ReceiveIdoc 작업에는 단일 XML 노드(idocData>)<의 문자열에 IDOC 데이터가 포함되므로 어댑터는 이러한 작업에서 노드 값 스트리밍을 지원합니다.

이러한 작업에 대해 노드 값 스트리밍을 수행하려면 다음을 수행할 수 있습니다.

  • 메시지 본문을 제공하기 위해 노드 값 스트리밍을 구현하는 BodyWriter 를 사용하여 SendIdoc 요청 메시지(아웃바운드)를 만듭니다.

  • 노드 값 스트리밍을 구현하는 XmlDictionaryWriter를 사용하여 메시지에서 WriteBodyContents 메서드를 호출하여 ReceiveIdoc 요청 메시지(인바운드)를 사용합니다.

    WCF 채널 모델을 사용하여 플랫 파일(문자열) IOC를 스트리밍하는 방법에 대한 자세한 내용은 WCF 채널 모델을 사용하여 SAP의 스트리밍 Flat-File IDOC를 참조하세요.

참고 항목

WCF 채널 모델을 사용하여 애플리케이션 개발