다음을 통해 공유


WCF 서비스 모델을 사용하여 SAP에서 RFC 호출

mySAP Business Suite용 Microsoft BizTalk 어댑터는 SAP 시스템의 RFC를 클라이언트 프로그램에서 호출할 수 있는 작업으로 표시합니다. WCF 서비스 모델에서 이러한 작업은 생성된 WCF 클라이언트 클래스의 메서드로 호출됩니다. 어댑터 서비스 참조 Visual Studio 플러그 인 추가를 사용하여 코드에서 호출하려는 각 RFC에 대한 메서드가 포함된 WCF 클라이언트 클래스를 생성할 수 있습니다. 어댑터 서비스 참조 추가 플러그 인은 각 RFC에서 사용되는 매개 변수 및 데이터 형식을 캡슐화하는 .NET 형식도 생성합니다. 그런 다음 이 WCF 클라이언트 클래스의 instance 만들고 해당 메서드를 호출하여 대상 RFC를 호출할 수 있습니다.

다음 섹션에서는 SAP 어댑터를 사용하여 SAP 시스템에서 RFC를 호출하는 방법을 보여줍니다.

WCF 클라이언트 클래스

SAP 어댑터는 단일 서비스 계약인 "Rfc"에 따라 모든 RFC 작업을 표시합니다. 즉, 호출하려는 모든 RFC 작업에 대해 단일 WCF 클라이언트 클래스인 RfcClient가 만들어집니다. 각 대상 RFC는 이 클래스의 메서드로 표시됩니다. 각 메서드에서:

  • SAP 내보내기 매개 변수는 out 매개 변수로 표시됩니다.

  • SAP 변경 매개 변수는 ref 매개 변수로 표시됩니다.

  • 구조체와 같은 복잡한 SAP 형식은 SAP 형식의 필드에 해당하는 속성을 사용하여 .NET 클래스로 표시됩니다. 이러한 클래스는 네임스페이스 microsoft.lobservices.sap._2007._03.Types.Rfc에 정의되어 있습니다.

    다음 코드는 RfcClient 클래스의 일부와 SAP 시스템에서 SD_RFC_CUSTOMER_GET 호출하는 메서드를 보여 주는 코드입니다.

 [System.Diagnostics.DebuggerStepThroughAttribute()]  
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]  
public partial class RfcClient : System.ServiceModel.ClientBase<Rfc>, Rfc {  
  
    ...  
  
    /// <summary>The metadata for this RFC was generated using the RFC SDK.</summary>  
    /// <param name="KUNNR">Customer number</param>  
    /// <param name="NAME1">Name of the customer</param>  
    /// <param name="CUSTOMER_T">Table of the selected customers</param>  
    /// <returns></returns>  
    public void SD_RFC_CUSTOMER_GET(string KUNNR, string NAME1, ref microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] CUSTOMER_T) {...}  
}  

RFC 클라이언트 애플리케이션을 만드는 방법

RFC 클라이언트 애플리케이션을 만들려면 다음 단계를 수행합니다.

RFC 클라이언트 애플리케이션을 만들려면

  1. RfcClient 클래스를 생성합니다. 어댑터 서비스 참조 Visual Studio 플러그 인 추가 또는 ServiceModel 메타데이터 유틸리티 도구(svcutil.exe)를 사용하여 작업하려는 RFC를 대상으로 하는 RfcClient 클래스를 생성합니다. WCF 클라이언트를 생성하는 방법에 대한 자세한 내용은 SAP 솔루션 아티팩트용 WCF 클라이언트 또는 WCF 서비스 계약 생성을 참조하세요.

  2. 1단계에서 생성된 RfcClient 클래스의 instance 만들고 클라이언트 바인딩을 지정합니다. 클라이언트 바인딩을 지정하려면 RfcClient 에서 사용할 바인딩 및 엔드포인트 주소를 지정해야 합니다. 코드에서 명령적으로 또는 구성에서 선언적으로 이 작업을 수행할 수 있습니다. 클라이언트 바인딩을 지정하는 방법에 대한 자세한 내용은 SAP 시스템에 대한 클라이언트 바인딩 구성을 참조하세요. 다음 코드는 구성에서 RfcClient 를 초기화하고 SAP 시스템의 자격 증명을 설정합니다.

    RfcClient rfcClient = new RfcClient("SAPBinding_Rfc");  
    
    rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
    rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
    
  3. WCF 클라이언트를 엽니다.

    rfcClient.Open();  
    
  4. 2단계에서 만든 RfcClient 에서 메서드를 호출하여 SAP 시스템에서 작업을 수행합니다. 다음 코드는 RfcClientSD_RFC_CUSTOMER_GET 메서드를 호출하여 SAP 시스템에서 RFC를 호출합니다.

    microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] customers =   
        new microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[0];  
    
    rfcClient.SD_RFC_CUSTOMER_GET(string.Empty, "AB*", ref customers);  
    
  5. WCF 클라이언트를 닫습니다.

    rfcClient.Close();   
    

예제

다음은 "AB"로 시작하는 이름의 고객 목록을 반환하기 위해 SD_RFC_CUSTOMER_GET 호출한 다음 각 고객의 이름과 ID를 콘솔에 기록하는 전체 코드 예제입니다. 이 예제에서는 using 문 내에 RfcClient를 만듭니다. RfcClient를 명시적으로 닫을 필요가 없습니다. 실행 경로가 컨텍스트를 종료하면 닫힙니다.

using System;  
using System.Collections.Generic;  
using System.Text;  
  
using System.ServiceModel;  
using Microsoft.ServiceModel.Channels;  
using Microsoft.Adapters.SAP;  
  
namespace SapRfcClientSM  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            try  
            {  
                // Create client from configuration  
                using (RfcClient rfcClient = new RfcClient("SAPBinding_Rfc"))  
                {  
  
                    rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
                    rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
  
                    // Open client  
                    rfcClient.Open();  
  
                    microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] customers = new microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[0];  
  
                    // Invoke SD_RFC_CUSTOMER_GET  
                    rfcClient.SD_RFC_CUSTOMER_GET(string.Empty, "AB*", ref customers);  
  
                    // Write the results to the console  
                    foreach (microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST customer in customers)  
                    {  
                        Console.WriteLine("Customer Name = " + customer.NAME1);  
                        Console.WriteLine("         Id   = " + customer.KUNNR);  
                        Console.WriteLine();  
                    }  
                }  
            }  
            catch (Exception ex)  
            {  
                Console.WriteLine(ex.Message);  
                if (ex.InnerException != null)  
                    Console.WriteLine("Inner exception is :" + ex.InnerException);  
            }  
        }  
    }  
}  

참고 항목

WCF 서비스 모델을 사용하여 애플리케이션 개발
RFC 작업에 대한 메시지 스키마