SAP를 사용하여 채널 만들기
WCF 채널 모델에서는 SAP 시스템에서 작업을 호출하거나 WCF 채널을 통해 MYSAP Business Suite용 Microsoft BizTalk 어댑터와 SOAP 메시지를 교환하여 SAP 시스템에서 메시지를 받습니다.
IRequestChannel 또는 IOutputChannel을 사용하여 어댑터에 메시지를 보내 작업(아웃바운드 작업)을 호출합니다.
IReplyChannel을 통해 메시지를 받습니다(SAP 시스템에서 트리거됨).
이 섹션의 topics 인바운드 및 아웃바운드 작업에 사용되는 채널 셰이프를 만들고 구성하는 방법에 대한 정보를 제공합니다.
아웃바운드(클라이언트) 채널 만들기
IRequestChannel 또는 IOutputChannel을 사용하여 SAP 시스템에서 작업을 호출할 수 있습니다. 두 경우 모두 먼저 적절한 인터페이스를 사용하여 System.ServiceModel.ChannelFactory 를 만듭니다. 그런 다음 팩터리를 사용하여 채널을 만듭니다. 채널을 만든 후에는 이 채널을 사용하여 어댑터에서 작업을 호출할 수 있습니다.
아웃바운드 채널을 만들고 열려면
엔드포인트 및 바인딩을 사용하여 원하는 채널 셰이프에 대한 ChannelFactory instance 만들고 초기화합니다. 엔드포인트는 SAP 연결 URI를 지정하고 바인딩은 SAPDBBinding의 instance. (채널 팩터리를 열기 전에 필요한 바인딩 속성을 설정합니다.)
ClientCredentials 속성을 사용하여 채널 팩터리에 대한 SAP 자격 증명을 제공합니다.
채널 팩터리를 엽니다.
채널 팩터리에서 CreateChannel 메서드를 호출하여 채널의 instance 가져옵니다.
채널을 엽니다.
코드 또는 구성에서 바인딩 및 엔드포인트 주소를 지정할 수 있습니다.
코드에서 바인딩 및 엔드포인트 주소 지정
다음 코드 예제에서는 코드에서 바인딩 및 엔드포인트 주소를 지정하여 IRequestChannel 을 만드는 방법을 보여줍니다. IOutputChannel을 만드는 코드는 ChannelFactory 및 채널 형식에 대한 IOutputChannel 인터페이스를 지정해야 한다는 점을 제외하고 동일합니다.
// Create binding -- set binding properties before you open the factory.
SAPBinding sapBinding = new SAPBinding();
// Create address.
EndpointAddress sapAddress = new EndpointAddress("sap://Client=800;lang=EN@A/YourSAPHost/00");
// Create channel factory from binding and address.
ChannelFactory<IRequestChannel> factory =
new ChannelFactory<IRequestChannel>(sapBinding, sapAddress);
// Specify credentials.
factory.Credentials.UserName.UserName = "YourUserName";
factory.Credentials.UserName.Password = "YourPassword";
// Open the factory
factory.Open();
// Get channel and open it.
IRequestChannel channel = factory.CreateChannel();
channel.Open();
구성에서 바인딩 및 엔드포인트 주소 지정
다음 코드 예제에서는 구성에 지정된 클라이언트 엔드포인트에서 채널 팩터리를 만드는 방법을 보여 줍니다.
// Create channel factory from configuration.
ChannelFactory<IRequestChannel> factory =
new ChannelFactory<IRequestChannel>("MyRequestChannel");
// Specify credentials.
factory.Credentials.UserName.UserName = "YourUserName";
factory.Credentials.UserName.Password = "YourPassword";
// Open the factory.
factory.Open();
// Get a channel and open it.
IRequestChannel channel = factory.CreateChannel();
channel.Open();
구성 설정
다음 코드는 이전 예제에 사용된 구성 설정을 보여 있습니다. 클라이언트 엔드포인트에 대한 계약은 만들려는 채널 셰이프의 종류에 따라 "System.ServiceModel.Channels.IRequestChannel" 또는 "System.ServiceModel.Channels.IRequestChannel"이어야 합니다.
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.serviceModel>
<bindings>
<sapBinding>
<binding name="SAPBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" enableBizTalkCompatibilityMode="false"
receiveIdocFormat="Typed" enableSafeTyping="false" generateFlatFileCompatibleIdocSchema="true"
maxConnectionsPerSystem="50" enableConnectionPooling="true"
idleConnectionTimeout="00:15:00" flatFileSegmentIndicator="SegmentDefinition"
enablePerformanceCounters="false" autoConfirmSentIdocs="false"
acceptCredentialsInUri="false"
padReceivedIdocWithSpaces="false" sncLibrary="" sncPartnerName="" />
</sapBinding>
</bindings>
<client>
<endpoint address="sap://CLIENT=800;LANG=EN;@a/ADAPSAP47/00?RfcSdkTrace=False&AbapDebug=False"
binding="sapBinding" bindingConfiguration="SAPBinding" contract="System.ServiceModel.Channels.IRequestChannel"
name="MyRequestChannel" />
</client>
</system.serviceModel>
</configuration>
인바운드(서비스) 채널 만들기
SAPBinding의 instance 바인딩 속성을 설정하여 SAP 시스템에서 인바운드 메시지를 받도록 어댑터를 구성합니다. 그런 다음, 이 바인딩을 사용하여 IReplyChannel 채널을 가져와 어댑터에서 작업을 수신할 수 있는 채널 수신기를 빌드합니다.
데이터 변경 알림을 받기 위해 IReplyChannel을 만들고 열려면
SAPBinding의 instance 만듭니다.
수신하려는 작업에 필요한 바인딩 속성을 설정합니다. AcceptCredentialsInUri 바인딩 속성을 설정해야 합니다.
BindingParameterCollection을 만들고 수신하려는 작업의 작업이 포함된 InboundActionCollection을 추가합니다. 어댑터는 다른 모든 작업에 대해 SAP 시스템에 예외를 반환합니다. 이 단계는 선택 사항입니다. 자세한 내용은 WCF 채널 모델을 사용하여 SAP 시스템에서 인바운드 작업 수신을 참조하세요.
SAPBinding에서 BuildChannelListener<IReplyChannel> 메서드를 호출하여 채널 수신기를 만듭니다. SAP 연결 URI를 이 메서드의 매개 변수 중 하나로 지정합니다. 연결 URI에는 SAP 시스템의 RFC 대상에 대한 매개 변수가 포함되어야 합니다. SAP 연결 URI에 대한 자세한 내용은 SAP 시스템 연결 URI 만들기를 참조하세요. 3단계에서 BindingParameterCollection 을 만든 경우 채널 수신기를 만들 때도 이를 지정합니다.
수신기를 엽니다.
수신기에서 AcceptChannel 메서드를 호출하여 IReplyChannel 채널을 가져옵니다.
채널을 엽니다.
다음 코드에서는 채널 수신기를 만들고 IReplyChannel 을 가져와 어댑터에서 작업을 수신하는 방법을 보여 줍니다.
// Create a binding and specify any binding properties required
// for the opreations you want to receive
SAPBinding binding = new SAPBinding();
// Set AcceptCredentialsInUri because the URI must contain credentials.
binding.AcceptCredentialsInUri = true;
// Create an InboundActionCollection and add the message actions to listen for,
// only the actions added to the InboundActionCollection are received on the channel.
// In this case a single action is specified: http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_MKD_ADD
InboundActionCollection actions = new InboundActionCollection(listeneraddress);
actions.Add("http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_MKD_ADD");
// Create a BindingParameterCollection and add the InboundActionCollection
BindingParameterCollection bpcol = new BindingParameterCollection();
bpcol.Add(actions);
// Create the channel listener by specifying
// the binding parameter collection (to filter for the Z_RFC_MKD_ADD action) and
// a connection URI that contains listener parameters.
Uri listeneraddress =
new Uri("sap://User=YourUserName;Passwd=YourPassword;Client=800;Lang=EN;@a/YourSAPHost/00?ListenerGwServ=SAPGATEWAY&ListenerGwHost=YourSAPHost&ListenerProgramId=SAPAdapter");
listener = binding.BuildChannelListener<IReplyChannel>(connectionUri, new BindingParameterCollection());
listener.Open();
// Get a channel from the listener and open it.
channel = listener.AcceptChannel();
channel.Open();