Wednesday, December 24, 2008

BizTalk Server MessageBox and Tracking DB Clean up! (메시지박스 와 추적DB 비우기)

이전 BizTalk Server 2004로 프로젝트를 할때 "\SDK\Samples\Admin\Database Maintenance" 폴더에 있는 "Purge_DTADB.sql" 스크립트를 구성하지 않은 채로 상단기간 운영할 경우 무시무시한 문제가 발생한 적 있습니다.
BizTalkDTADb가 몇십 기가바이트까지 올라가다 결구 Disk Full이 나면서 시스템이 다운되버렸죠!

왜 이런 Procedure를 기본적으로 Agent에 설정하지 않았는가! 해서 결국 나중에 Service Pack이 나오면서 Agent에 추가 되었습니다.
하지만 이미 커져버린 DB에 대해서는 삭제하는 Hotfix까지 나오게 되었습니다.
핫픽스 다운로드: http://support.microsoft.com/kb/894253/

BizTalk Server 2006부터는 기본적으로 Procedure를 가지고 있으면 Agent에 자동으로 추가됩니다. 하지만! Disable상태이기 때문에 정책에 맞추어서 세팅을 해주어야만 합니다. (반드시! 반드시! 해주어야 합니다.)

프로젝트를 하다보면 의외로 많은 문제를 발생하는 부분중 하나이기 때문에 처음 설치시 구성하는 방법과 문제가 발생하였을때 MessageBox 와 Tracking DB를 비우는 방법에 대해서 알려드리도록 하겠습니다.

1. BizTalk Server 2006 or 2006 R2 설치 후 구성
SQL Server Agent에서 확인하시면 "DTA Purge and Archive" 라는 작업을 확인 할 수 있습니다. 기본적으로는 Disable상태이면 절차를 수정 후 Enable상태로 변경하시면 됩니다.

(1) Archive and Purge





  • 기본 값

  • exec dtasp_BackupAndPurgeTrackingDatabase
    0, -- @nLiveHours
    1, --@nLiveDays
    30, --@nHardDeleteDays
    'c:\DTAPurgeandArchive', --@nHardDeleteDays
    null, --@nvcFolder
    null, --@nvcValidatingServer
    0 --@fForceBackup Soft purge process

  • 파라메터

  • –@nLiveHour+ @nLiveDays : 합계 보다 오래되고 실행 완료된 자료는 삭제 하며 이전 자료는 보관
    –@nHardDeleteDays : 일자 기준으로 오래된 자료는 실행 완료와 상관 없이 삭제
    –@nvcFolder : backup파일을 위한 폴더 정의
    –@nvcValidatingServer : 유효성 검사 서버, null은 유효성 검사를 하지 않겠다는 의미
    –@fForceBackup Soft purge process : 현재 미 사용

  • 수정값 (예시)

  • –1일이 지난 실행 완료된 추적 자료는 삭제하며, 30일이 지난 경우 종료 여부와 상관없이 모든 추적 자료는 삭제하며, backup폴더는 c:\DTAPrugeandArchive’이고, validation은 사용하지 않음
    exec dtasp_BackupAndPurgeTrackingDatabase
    0, --@nLiveHours
    1, --@nLiveDays
    30, --@nHardDeleteDays
    ‘c:\DTAPurgeandArchive’, --@nvcFolder
    null, --@nvcValidatingServer
    0 --@fForceBackup Soft purge process



    ** 백업파일을 남길 필요가 없다면 dtasp_BackupAndPurgeTrackingDatabase안에 보시면 PurgeTrackingDatabase 라는 프로시져를 사용하시면 됩니다.



    사이트에서 백업 유지에 대한 정책이 따로 없고 자체 백업을 할때 이걸로 많이 사용합니다.

  • 예시 (하루 단위만 남기고 Purge)

  • declare @dtLastBackup datetime set @dtLastBackup = GetUTCDate()
    exec dtasp_PurgeTrackingDatabase 1, 0, 1, @dtLastBackup

    ** 위의 값은 예시일뿐입니다. 특히 경로 부분은 반드시 로컬이 아닌 별도의 머신이나 장치를 권장합니다.


    2. MessageBox and Tracking DB Clean up!
    Agent동작이 정상적이지 못하였다던가..구성을하지 못하였을때.. 또는 삭제되지 않는 메시지가 발생하였을때.. 데이터베이스를 비우고 싶은 욕망에 사로잡히게 됩니다.
    이런 경우를 위해서 BizTalk Server 2006부터는 기본적으로 쿼리를 제공하고 있습니다.

  • Message Box 비우기

  • bts_CleanupMsgbox, bts_PurgeSubscriptions 프로시져를 호출하면 되며 생성되지 않은 경우에는 \Schema 에 있는 msgbox_cleanup_logic.sql 쿼리를 이용하여 생성하면 됩니다.

    쿼리가 없다면 여기서 받으시면 됩니다

    (1) BizTalk Service 중지
    (2) 웹 서비스를 사용한다면 IIS Reset
    (3) "bts_CleanupMsgbox" 프로시져를 MsgBoxDb에서 실행 (인스터스를 deletion으로 표시하는 역할이지 실제 삭제 작업을 수행하지는 않음)
    (4) "bts_PurgeSubscriptions" 프로시져를 MsgBoxDb에서 실행 (deletion표시가 된 모든 메시지를 삭제한다.)
    (5) BizTalk Service 시작

  • Tracking DB 비우기

  • (1) BizTalk Service 중지
    (2) "dtasp_CleanHMData" BizTalkDTADb에서 실행
    (3) BizTalk Service 시작
    이런 기능들을 잘 이용한다면 BizTalk Server를 유지하는데 큰 도움이 될것입니다.

    Wednesday, December 10, 2008

    BizTalk Server 2009 베타 & RFID MOBILE GA

    9월달에 BizTalk Server 2009의 릴리즈 소식을 전해드린이후 새로운 소식이 올라왔습니다.

    첫번째로는 BizTalk Server 2009 Beta를 다운로드 받을 수 있습니다. (다운)
    다운받는 방법은 Connect사이트에 로그인하여 연결디렉터리를 선택합니다. "BizTalk Server 2009 Public Beta Evaluation"을 선택하여 들어가시 후 다운로드 선택하며 받을 수 있습니다.



    두번째 뉴스는 RFID Mobile입니다. BizTalk RFID Mobile이 공개되었습니다. BizTalk Server 2006 R2를 사용하시는 고객에 대해서도 라이세스의 일부로 보장받을 수 있다고 합니다.

    Friday, November 28, 2008

    MSDTC(Microsoft Distributed Transaction Coordinator) 문제 해결하기

    BizTalk Server를 설치하러 다니다보면 꼭 한번은 격는 문제중에 하나는 MSDTC 문제입니다.

    문제가 생기면 인프라적인 문제와 애플리케이션적인 문제속에서 고민하느라 시간을 마구 잡아먹는 하마가 될 경우도 종종 발생합니다.

    오늘은 그동안 사이트를 돌아다니면서 여러가지 시도해본것중에 필요한 스텝만 정리해보도록 하겠습니다.

    그럼 MSDTC가 무엇이냐?

    DTC(Distributed Transaction Coordinator) 서비스는 데이터베이스, 메시지 큐, 파일 시스템 등 두 가지 이상의 트랜잭션 보호 리소스를 업데이트하는 트랜잭션을 조정합니다. 단일 환경의 컴퓨터나 또는 네트워크 상에 있는 분산환경의 컴퓨터들의 트랜잭션 리소스를 보호합니다. blah..blah..blah.. 자세한 설명은 링크를 확인하시기 바랍니다. 한국어 페이지는 열리지 않는군요..

    큰 내용을 살펴보면 트랜잭션을 사용하는 상황에서 그것도 분산환경 상에서 그것을 보장해주는 기술입니다.

    트랜잭션 (Transaction) 이란?

    정보의 교환이나 데이터베이스 갱신 등 연관되는 작업들에 대한 일련의 연속을 의미...

    예를들어 은행 ATM기를 사용할때 A라는 고객과 B라는 고객에 서로 다른 위치에서 같은 구좌의 돈을 찾게 되는 상황이 발생하였을때 B라는 사람이 먼저 조회를 했지만 A라는 사람이 돈을 찾아버리게 되면 B가 조회한 내용과 찾을 수 있는 돈이 달라지면서 문제가 발생할 수 있습니다. 이럴때에 구좌의 돈(데이터)의 무결성을 보장해주는것이 트랜잭션이라고 생각하시면 됩니다.

    분산환경에서 트랜잭션을 보호해준다!

    이렇게 보았을때는 괴장히 비즈니스에 도움을 주는 기술입니다. 하지만! 이것이 Microsoft사에서 나왔기때문에.. Microsoft 제품 (SQL, MSMQ)에 제한적으로 지원됩니다. 물론 Oracle 같은 경우도 지원을 하지만 Version을 매우 따지기때문에 아무래도 이기종간 (Oracle, DB2, HOST, CA...)에 사용하기에는 좀 무리가 있습니다.

    사설이 길었지만... 이기술이 BizTalk Server에서도 사용되어지고 있습니다. BizTalk Server 와 Message Box(SQL) 사이에 트랜잭션 그리고 BizTalk Server 와 분산환경의 SQL Server와 통신하기 위해서 사용되고 있습니다.

    그렇다면 왜! Microsoft 제품군을 설치하는데 문제가 발생할까?

    BizTalk Server를 설치하게 되면 절대! 같은 머신에 설치하는 경우가 없습니다. 테스트 용도 또는 아주 작은 사이즈에서는 가끔 설치하기도 하지요.. 그렇게 되면 BizTalk Server와 Message Box 사이가 분산환경이 되버리면서.. IP Filtering, FireWall, Security... 같은 아주 다양한 문제와 맞이 하게 됩니다.

    MSDTC는 분산환경에서 트랜잭션을 보장하기 위해 매우 많은 포트를 사용하고 있습니다. 그것도 동적으로! 가끔 너무 많은 포트를 사용한다는 고객사로부터 듣습니다.

    MSDTC관련 오류가 발생하였다!! 무엇을 확인해야할까?

    1. 방화벽 체크

    MSDTC를 사용하기 위해서는 필요한 포트가 있습니다. 반드시 포트가 오픈되었는지 확인해야 합니다.

    다음의 포트리스트는 일반적으로 BizTalk Server에서 필요로 하는 포트입니다.



    2. MSDTC 구성 체크

    로컬 머신과 MSDTC통신을 하고 싶은 리모트 머신의 MSDTC구성을 확인합니다.



    (1) Application Server

    Windows Add/Remove -> Applicatoin Serve에서 "Enable network COM+ access", "Enable network DTC acess"를 체크하여 설치하도록 합니다.



    (2) MSDTC Security Configuration

    Start->Administrator Tools->Component Services에서 트리노드를 확장하여 "My Computer"에서 속성버튼을 클릭합니다.

    "COM Security"탭으로 이동 "Security Configuration"을 클릭합니다.

    - "Network DTC Access" 체크
    - "Allow Remote Clients, Allow Remote Administration" 체크
    - "Allow Inbound, Allow Outbound, Incomming Caller Authentication Required" 체크



    ** Windows 2003 Server 버전을 기준으로 설명하고 있습니다. Window Server 2003 이전 버전은 Regstry에서 설정하여야 합니다.

    (3) Port Range assignment

    기본적으로 포트의 제한을 걸지 않은 상태라면 0~65535라는 말 그대로 몽땅 다 이용하도록 되어있다.

    일반적으로 기업내에서 모든 포트를 다 열어주지 않기 때문에 제한을 하도록 합니다. 일반적으로 200개 정도를 동적포트로 할당합니다.



    ** 로컬 머신과 리모트 머신 모두 구성해야됩니다.

    자 이렇게 하면 기본적인 구성은 완료가 되었다. 하지만.. 실제 해보면 안되는 경우가 비일비재 합니다.. 이제 몇가지 사항을 더 확인해보고 Microsoft에서 제공하는 Tool을 이용하면 당신은 MSDTC를 멋지게 연결할 수 있을것입니다.

    3. HOST명, IP 확인

    MSDTC연결은 HOST명으로 연결되기 때문에 HOST명과 IP가 동일한지 반드시 확인해봐야 합니다.

    AD(Active Directory)환경이라면 Domain Server에서 HOST명과 IP를 연결해 줍니다.

    AD환경이 아니라면 "C:WINDOWSsystem32driversetc" hosts파일에서 지정할 수 있습니다.



    ** 한번 이런경우가 있었습니다. AD환경이기 때문에 아무생각없이 테스트를 하고 있었는데 아무리 해도 연결이 안되는겁니다.나중에 알고보니 hosts파일에 IP가 고정되어 전혀 다른 컴퓨터를 바라보고 테스트를 하고 있었습니다. hosts파일을 수정한 후에야 정상적으로 연결할 수 있었습니다.

    4. 컴퓨터 방화벽 체크

    Windows 2003, XP, Vista... 등에서는 기본적으로 방화벽을 제공 하고 있습니다. 방화벽에 MSDTC를 사용할 수 있도록 구성하거나 방화벽 사용을 중지하여야 합니다.



    5. Microsoft에서 제공하는 툴로 점검하기 (DTCPing, DTCTester, TCPView)

    Microsoft에서 제공하는 툴로 정상적으로 RPC통신이 되는지 포트가 열리는지를 확인할 수 있습니다.

    (1) DTCPing

    가장 기본적으로 사용하는 툴로서 방화벽이 제대로 열렸는지 확인 할 수 있습니다. RPC통신에 필요한 포트를 확인합니다.

    실제 통신은 하지 않기 때문에 통신은 되지만 안되는 경우가 발생할 수 있습니다.

    1. 서버와 클라이언트에 모두 실행되어야 합니다.



    2. HOST명으로만 연결할 수 있습니다. (AD환경이 아니라면 HOST파일에 정의되어야 합니다.)

    ** 다운로드는 여기서 받을 수 있습니다.

    (2) DTCTester

    DTCPing이 기본적인 RPC통신 확인만 한다면 DTCTester는 실제 SQL데이터베이스에 DTC작업을 합니다. MSDTC가 되는지 확실하게 테스트해 볼 수 있습니다.

    1. SQL에 데이터베이스가 있는 환경에서만 사용할 수 있습니다.



    ** ODBC Data source를 이용하여 연결하기 때문에 테스트하려는 서버의 SQL의 Data Source를 반드시 만들어야 합니다.

    2. SQL데이터베이스에 하는 작업은 다음과 같습니다.



    ** 사용방법은 "dtctester.exe " 입니다.

    - SQL 서버의 데이터 원본명(DSN)으로 연결을 합니다.
    - 임시 테이블을 생성합니다.
    - 트랜잭션을 초기화 합니다.
    - 임시테이블에 데이터를 입력합니다.
    - 분산트랜잭션을 커밋합니다.
    - 커밋이 되었는지 확인합니다.
    - 컨넥션을 종료합니다.



    ** 사용방법은 여기서 볼 수 있습니다.
    다운로드는 여기서 받을 수 있습니다.

    (3) TCPView

    "netstat -na"와 비슷한 기능을 제공합니다. 현재 열린 포트 목록과 상태들을 확인 할 수 있습니다. GUI기반으로 좀더 편하게 확인 할 수 있습니다.



    ** Dtcping.exe 가 1567포트로 열린것을 확인할 수 있습니다.

    ** 다운로드는 여기서 받을 수 있습니다.

    MSDTC문제가 발생하면..같은 오류이지만 너무나도 많은 환경에 의해서 발생할 수 있습니다. 그 중에서 많이 해결했던 방법을 조금이나만 도움이 되길 바라면서 정리했습니다.

    RFC Server 구성하기 - (3) RFC Server for BizTalk WCF SAP Adapter

    드디어 세번째 시간 BizTalk WCF SAP Adapter를 이용하여 RFC Server를 구성하는부분에 대해서 진행하도록 하겠습니다.

    SAP .NET Connector는 1.2 버전이후로는 SAP사에서 더이상 지원하지 않는것으로 결정되었습니다.
    1.2 버전은 .NET Framework 1.1 버전을 지원하고 있으므로, Microsoft의 새로운 Version에서 SAP와 연결하고 싶다면 어떻게 해야되는지 고민이 되었습니다.

    이러한 문제를 해결해주기 위해서 Microsoft사에서 SAP .NET Connector를 WCF기술로 구현해서 나오게되었습니다. BizTalk WCF SAP Adapter라고는 하지만 BizTalk이 없이 SAP.NET Connector처럼 모듈 형태로 사용가능하며, Microsoft의 새로운 Version에서 동작함으로 앞으로 기대할만할 것 같습니다. SAP.NET Connector는 SAP에서 만들어서 배포하는 관계로 문제가 발생했을때 지원받기가 어려운 점이 있었습니다.


    (2) RFC Server SAP Side에서 구성한 RFC를 그대로 사용하도록 하겠습니다. 내용은 단순하게 덧셈을 하는것으로 잡았으며, MiniSAP이므로 실제 SAP와는 조금 차이 날 수 있습니다.



    SAP에서 RFC 구성이 완료되었으면 BizTalk Server측으로 넘어가도록 합니다.
    BizTalk WCF SAP Adapter가 정상적으로 설치되었다면, Visual Studio를 실행하여 BizTalk 프로젝트를 생성합니다.
    BizTalk 프로젝트에서 오른쪽 마우스 버튼을 클릭 Add -> Add Generated Items를 선택합니다.

    Add Generated Items의 왼쪽 트리뷰에서 Consume Adapter Service을 선택합니다.

    WCF Adapter Wizard화면이 나오면 Binding을 SAPBinding로 지정합니다.
    SAP로 지정 후 접근할 SAP의 주소 및 인증정보를 입력합니다.



    SAP 접근 인증정보 입력



    SAP 서버 연결 정보 입력



    설정이 완료된 후 Connect을 클릭하면 SAP 서버의 내용이 나옵니다.

    Contract type을 Client로 지정 후 검색 또는 왼쪽 트리에서 필요한 RFC를 찾아서 추가합니다. OK를 클릭하면 Z_RFC_ADD 함수의 스키마가 생성됩니다.

    RFC Server 방식은 수신 받은 이벤트를 가지고 로직을 실행 후 리턴값을 응답하는 구조입니다.
    여기서는 Orchestration을 생성하여 C#으로 구성된 모듈(로직)을 호출하여 응답값을 리턴하도록 합니다.



    Expression Shape를 사용하여 C# 모듈을 호출합니다.

    응답값을 리턴하기 위해서는 WCF.Action값이 필요합니다. Action값은 Schema에서 확인할 수 있습니다.



    C# 모듈은 간단한 덧셈을 수행 후 Response Schema에 맞는 XML을 생성합니다.
    BizTalk 프로젝트가 생성이 완료되면 빌드하여 배포하도록 합니다.

    이제 RFC Server 이벤트를 수신받을 Receive Port를 생성합니다.



    RFC Server의 방식은 수신을 받은 후 응답을 주는 형태이므로 Request Response Recieve Port로 생성합니다.



    포트이름은 알아볼수 있는 내용으로 지정하시면 됩니다.


    Receive Location에서 Type은 WCF-Custom으로 선택합니다.
    Handler를 선택 후 파이프라인은 Default XML 파이프라인으로 지정합니다.
    Configure...을 클릭합니다.


    WCF-Custom 어댑터 설정화면이 나오면 Binding 탭에서 SAPBinding을 선택합니다

    SAP 서버에 접근하는 인증정보를 입력합니다.

    General 탭으로 다시 돌아와서 Address를 입력합니다.
    ** 앞서서 SAP Counsum Wizard에서 생성한 Address를 사용해보았는데 연결이 되지 않습니다. 사용자가 수정을 해야합니다.


    주소는 다음과 같은 포멧으로 만들어주면 됩니다.

    sap://CLIENT=00;LANG=EN;@A/MINISAP/00?ListenerGwHost=MINISAP&ListenerGwServ=SAPGW00&ListenerProgramId=BIZTALK


    설정이 완료 된 후 Receive Port를 Enable 상태로 변경합니다



    (2) RFC Server SAP Side에서 했던 Connection Test를 해서 연결이 올바르게 이루어지는지 확인합니다.



    Connection Test가 완료되었다면, 이제 실제로 SAP 에서 이벤트를 주어 RFC Server가 동작하는지 테스트 해보도록 합니다.


    이렇게 해서 3번에 걸쳐 RFC Server 이용하기 아티클이 끝났습니다. 이전에 테스트하면서 정리한 자료를 가지고 아티클을 올리려고 하니 아쉬운 캡쳐부분들이 생기는군요... 현재 프로젝트 중에는 WCF SAP 어댑터를 사용하지 않는 관계로 설치가 되지 않아 재 캡쳐도 어려운 상황이었습니다. 아티클에서 궁금하신부분은 언제든지 메일(dhysys@gmail.com) 또는 덧글로 남기시면 답변하도록 하겠습니다.

    아직까지는 좀 아쉬운 부분들이 있는 WCF SAP Adapter 이지만 Microsoft의 특성상 버전이 향상되면서 획기적으로 개선이 되니 좀 기다려야되지 않을까 싶습니다.

    BizTalk Server와 관련해서 WCF Adapter 샘플을 제공하고 있습니다. 샘플은 다음링크에서 다운로드 받을 수 있습니다.

    BizTalk Server 2006 R2 Code Samples

    여기서 사용한 샘플 역시 여기서 다운로드 받아 약간의 수정을 통해 이용하였습니다.

    WCF SAP Adapter을 테스트 하면서 생각되어진 장단점은 다음과 같습니다.

    장점

    (1) 이전 BizTalk Adapter로는 지원되지 않는 부분들을 지원하고 있습니다.
    - RFC Server 지원
    - SAP ECC Version 지원

    (2) 마이크로소프트에서 돈?을 받고 파는 제품이기 때문에 문제 발생시 기술지원을 받을 수 있습니다.

    (3) 마이크로소프트에서 만들어 내기 때문에 앞으로도 꾸준히 업데이트 되면서 BizTalk 이외의 다른제품에서도 사용할 수 있도록 나오게 되었습니다 . SSIS (SQL Server Integration Service), IIS (Internet Information Service), MOSS (Microsoft Office Share Point Server), W/S (XML Web Service) 등등

    단점

    (1) 현재 나와있는 BizTalk WCF Adapter v1.0은 버그가 보이고 있습니다. SAP를 연결하는데 같은 버전의 SAP라도 오류가 그때그때 달라지니.. 좀 난감할때가 있습니다. 아무래도 첫번째 버전의 모습을 보이고 있지만, 내년에 v2.0 으로 몇가지 어댑터와 추가기능이 추가되어서 나오면 좀더 사용할만한 어댑터가 되지 않을까 싶습니다.

    (2) BizTalk Adapter로는 BizTalk으로 구매시 라이센스가 같이 들어오지만 BizTalk이 없이 사용할려고 할때에는 라이센스를 구매하셔야 합니다. SAP와 연계는 하고 싶지만 BizTalk은 너무 비싸서 구매에 망설여 진다면 WCF Adapter Pack만 구매해서 사용하시는것도 방법입니다.

    (3) 설치시 몇까지 지켜줘야 될 사항들이 있습니다. SAP GUI에서 dll 복사 설치라던가.. 아직까지는 원 클릭 설치가 되지 않습니다. SAP GUI 버전도 좀 가리는것 같습니다.

    (4) 여러번 Consume Adapter Wizard를 실행할 경우가 생기면 매번 인증정보와 서버정보를 입력해야 합니다. 이거 매우 반복성 작업이 되어버리는군요... 서버정보는 Configure a URI를 복사해서 사용하면 약간이나마 줄일 수 있습니다.

    RFC Server 구성하기 - (2) RFC Server SAP Side

    RFC Server 구성하기 두번째 아티클입니다. 이전 아티클에서 SAP.NET Connector를 이용하여 RFC Server를 구성하는것을 다루었는데..
    .NET측 구현만 보여드려서는 사실 구현하는게 힘들지 않을까 싶습니다.

    그래서 짧은 SAP 지식이지만 SAP에서 RFC Server를 구성하는 부분을 다루어 보도록 하겠습니다.
    관련 아티클을 보실려면 아래 링크를 클릭하세요.

    RFC 함수를 구현하는것에 대해서는 나중에 다시 다루도록 하겠습니다. 이번 아티클에서는 RFC Server를 구성하는 부분에 대해서 다루도록 하겠습니다.

    **SAP는 MiniSAP를 사용하고 있습니다 .실제 사용하는 SAP와 차이가 있을수 있습니다.

    RFC Server와 (1) SAP .NET Connector C# Side에서 구성한 Listener와의 통신 접점 구성을 해주어야 합니다.

    이 구성을 SAP는 RFC Destination을 생성한다고 합니다.
    트랜잭션 코드는 SM59 입니다.


    Display and maintain RFC destinations 화면에서 "Create"버튼을 클릭하면 RFC Destination을 생성하는 화면이 나옵니다.


    Connection Type"T"를 선택합니다. 여기서 "T"는 TCP/IP 통신의 의미입니다.


    "Registration" 버튼을 클릭한 후 ProgramID를 구분할수 있는 값으로 지정합니다. 여기서는 "BIZTALK"으로 지정하였습니다.


    ProgramID를 지정후 툴바의 플로피 디스크 아이콘 (Save)을 클릭하여 저장합니다.



    BIZTALK이라는 이름으로 RFC Destination이 생성된것을 확인할 수 있습니다.



    RFC Destination이 생성되면 외부 시스템과의 통신이 원활하게 이루어지는지 테스트를 해보게 됩니다.
    이때 SAP.NET Connector의 경우는 Console프로그램을 실행시켜 Listen을 하고 있는 상태이어야 합니다.
    BizTalk SAP Adapter의 경우는 Receive Port를 생성하여 Enable 상태이어야 합니다.



    "Test Connection"을 클릭하였을때 정상적으로 서비스가 Listen 상태라면 통신이 원활하게 되고 있다는것을 확인하실수 있습니다.
    연결 테스트가 되었다면 이제 RFC함수로가서 정상적으로 동작하는지 확인합니다.

    RFC 개발화면 트랜잭션코드는 SE37입니다.


    여기서는 미리 생성한 RFC "Z_RFC_ADD"를 사용하도록 합니다.



    RFC함수의 내용은 보시는것 처럼 값(VALUE)를 전달하는 역할만 합니다.
    툴바의 "Test or Execution" 아이콘을 클릭합니다.



    간단한 덧셈을 하는 내용입니다. 실제 덧셈을 하는 로직은 SAP.NET Connector로 구현한 Console 프로그램이나 BizTalk Server에서 구성된 로직이 되겠습니다. RFC함수는 값만 전달해주고 결과값을 돌려받습니다.

    여기서 중요한것은 SAP에서 이벤트가 시작하여 그것이 외부시스템에서 수행 후 그 결과값을 받을 수 있다는것입니다.

    간단한 값을 지정하고 어느 Destination을 통해 통신하는지를 지정 후 "Execute"를 클릭합니다.



    외부 시스템 서비스와 Destination 연결테스트가 정상적이며, 외부 서비스의 로직 구현이 정상이라면 결과물을 화면과 같이 받아 볼 수 있습니다.

    내용을 요약하면, 다음과 같은 스텝을 가지고 있습니다.

    1. RFC Destination 을 구성한다.
    2. RFC Destination 연결 테스트를 수행한다.
    3. RFC 함수에서 Destination을 지정하여 테스트를 수행한다.

    아주 간단한 내용으로 테스트를 하였지만 RFC Client와 RFC Server를 적절히 이용한다면 SAP와의 통신은 원활하게 할 수 있을것 같습니다. 세번째 아티클에서는 BizTalk WCF SAP 어댑터를 이용하여 RFC Server를 구성하는것에 대해서 다루도록 하겠습니다.

    Tuesday, November 25, 2008

    RFC Server 구성하기 - (1) SAP .NET Connector C# Side

    이번 아티클은 SAP.NET Connector를 이용하여 SAP RFC Server를 구성하는 방법에 대해서 이야기 할려고 합니다.

    아티클은 3회에 걸쳐 진행하도록 하겠습니다.


    BizTalk Server WCF SAP Adapter 가 나오기 전만 해도 이전 버전의 Microsoft BizTalk Adapter v2.0 for mySAP Business Suite에서는 RFC Server 방식을 지원하지 않았습니다.

    BizTalk Server WCF SAP Adapter 가 나오기 전만 해도 이전 버전의 Microsoft BizTalk Adapter v2.0 for mySAP Business Suite에서는 RFC Server 방식을 지원하지 않았습니다.

    ** RFC Server란?
    사실 SAP ABAP개발자에게는 너무나도 쉬운부분이겠지만 BizTalk 개발자 또는 Microsoft Product개발자에게는 생소할수 있는 부분입니다. 간단하게 이야기하며, SAP의 비즈니스 오브젝트를 외부에서 호출하기 위한 방법이 필요하고 그 방법으로 SAP에서 제공하고 있는것이 RFC입니다. RFC는 (Remote Function Call)로써 외부에서 SAP Function을 호출하기 위한 방법입니다. RFC는 Client와 Server의 두가지로 나누고 있으며, SAP Function에 비즈니스 로직이 존재하며, 외부모듈이 호출하는 것이 RFC Client 입니다. 외부모듈에 비즈니스 로직이 존재하며, SAP로 부터 이벤트를 받는 방식이 RFC Server입니다.

    http://help.sap.com/ 에서는 다음과 같이 나와있습니다.
    In the SAP System, the ability to call remote functions is provided by the Remote Function Call (RFC) interface. This interface allows for remote calls between two SAP Systems (R/3 as of Release 2.1 and R/2 as of Release 5.0D), or between an SAP System and a non-SAP system.

    server와 client에 대해서는..
    RFC programs for non-SAP Systems can function as either the caller or the called program in an RFC communication.
    There are two kinds of RFC programs: RFC client and RFC server programs:The RFC client is the instance that calls up the RFC to execute the function which is provided by an RFC server. In the following, the functions that can be executed remotely will be called RFC functions, and the functions provided by the RFC API will be called RFC calls.

    그렇다면! RFC Server를 이용하여 SAP 의 이벤트를 받고 싶다면 어떻게 하는지 알아보겠습니다.

    시스템 구성
    Windows Server 2003 Enterprise Edition with SP2
    Visual Studio 2003
    SAP .NET Connector 1.03
    JAVA VM Version 5 Runtime engine

    ** SAP .NET Connecotr는 Visual Studio 2003, .NET Framework 1.1까지만 지원하고 있습니다. 더 이상 SAP에서는 SAP .NET Connector를 지원하지 않겠다고 합니다. 그 이상 버전에서 사용하고 싶으시면 WCF SAP Adapter를 이용하셔야 합니다.

    사전 작업
    SAP RFC Destination 설정과 RFC 함수 구현이 완료되어 있어야 됩니다.

    실제 구현
    SAP .NET Connector에는 RunTime과 Design Time으로 분리되며, Visual Studio 2003을 지원하기 위해서는 반드시 Design Time이 설치되어야 합니다. 설치 된 후 Visual Studio 2003에서 프로젝트를 추가 후 -> 새로운 항목 추가를 클릭하면 SAP Connector Class라는 항목을 확인할 수 있습니다.


    SAP Connector Class를 선택 Name을 지정 후 Open을 클릭하면 SAP .NET Connector Wizard가 실행됩니다.


    SAP Server를 선택 후 Next를 클릭합니다.


    SAP 서버의 연결정보를 구성 후 Object Type을 Server Stub으로 선택 후 Next를 클릭합니다.


    RFC함수를 검색하여 ADD시킨 후 Next를 클릭합니다.


    C#코드가 자동생성되는것을 확인할 수 있습니다.


    Stub코드가 생성 된 후 Windows서버에서 SAP 이벤트를 수신받기 위해 Listener를 구성하여야 합니다. 일반적으로는 윈도우즈 서비스로 구성합니다.


    프로젝트가 구성되었습니다.
    프로젝트 구성이 완료되었으니 실제 소스를 구현합니다. 여기서는 콘솔 프로그램으로 작성하였습니다.


    using 문에 SAP.Connector를 추가합니다. (Wizard를 통해 Stub코드를 생성할때 SAP.Connector.dll은 자동 참조 됩니다.


    RFCServerConsole을 상속받아 구현합니다.


    콘솔프로그램의 구현은 간단합니다. SAP의 Detination정보를 가지고 서비스를 대기하는 Listener입니다.


    SAP에서 이벤트를 수신받았을때 수행되는 함수입니다. Wziard로 Stub을 생성 후 override하여 구현하면 됩니다. 여기서는 간단하게 X, Y값을 덧셈하는 로직입니다.

    실제 구현 소스는 여기서 다운로드 받으세요. (다른 이름 저장으로 받으세요!)