보정(BizTalk Server 샘플)
보정 샘플은 오케스트레이션에서 보정 셰이프를 사용하는 방법을 보여 줍니다.
이 샘플의 용도
이 샘플은 다음과 같은 일련의 단계를 수행하여 오케스트레이션에서 이미 커밋된 트랜잭션을 보정하는 방법을 보여 줍니다.
InfoPath 양식에 고객 데이터를 입력하고 데이터를 웹 서비스로 노출된 오케스트레이션에 전송합니다.
오케스트레이션에는 두 개의 병렬 작업이 있습니다. 첫 번째는 InfoPath 양식에 대한 승인을 반환하는 작업이며 두 번째는 Northwind 및 BTSCompensationSampleMailingList 데이터베이스를 업데이트하는 작업입니다.
두 번째 작업에서 오케스트레이션은 들어오는 메시지를 CRM(고객 관계 관리) 애플리케이션 메시지 형식에 매핑한 다음 Northwind 데이터베이스의 Customers 테이블을 업데이트합니다. 그 다음 BTSCompensationSampleMailingList 데이터베이스의 Mailing List 테이블이 업데이트됩니다.
둘 중 어느 하나라도 업데이트에 실패할 경우 외부 어셈블리를 호출하여 Northwind 데이터베이스에 대한 변경 내용을 보정하고 원래 고객 데이터를 데이터베이스에 다시 기록합니다.
이 샘플이 디자인된 방식 및 이유
범위 셰이프는 주로 보정을 포함하여 트랜잭션 실행 및 예외 처리에 사용됩니다. 범위는 두 개의 블록으로 구성됩니다. 첫 번째 블록은 컨텍스트 블록이고 두 번째 블록은 하나 이상의 예외 처리 또는 보정 블록일 수 있습니다. 이는 .NET 프로그래밍 언어의 try-catch 문과 유사합니다. UpdateContact.odx 오케스트레이션에는 두 개의 병렬 작업이 있습니다. 오른쪽 분기에서 try 블록은 Long-Running 트랜잭션 유형과 Upd_Backend 트랜잭션 식별자가 있는 업데이트된 백 엔드 시스템이라는 범위 셰이프입니다. 흐름에서 아래를 살펴보면 일반적인 예외를 catch하고 보정을 시작하는 catch 블록이 있습니다.
범위 셰이프에 대한 자세한 내용은 범위를 참조하세요. 범위 셰이프를 구성하는 방법도 참조하세요.
참고
트랜잭션 유형을 원자성 또는 장기 실행으로 설정하려면 오케스트레이션 자체가 장기 실행 트랜잭션이어야 합니다.
try 블록에는 CRM 업데이트 및 메일 업데이트라는 두 가지 범위 가 있습니다. 두 범위 모두 원자성 트랜잭션입니다. CRM 업데이트 범위에는 try 블록과 보정 블록이 있습니다. try 블록은 외부 어셈블리에 대한 메서드 호출을 통해 Northwind 데이터베이스를 업데이트합니다. 보정 블록에서는 보정 작업이 수행됩니다. 백 엔드 시스템 업데이트 범위에서 예외가 발생하면 CRM 식 실행 취소 셰이프의 코드가 레코드를 원래 상태로 다시 업데이트합니다. Catch 예외 블록의 보정 셰이프에 의해 트리거됩니다.
참고
원자성 트랜잭션은 트랜잭션 업데이트 시 오류가 발생한 경우 모든 부분 업데이트가 자동으로 롤백되며 트랜잭션에서 호출된 모든 .NET의 결과는 제외하고 모든 트랜잭션의 결과가 지워지도록 합니다.
참고
장기 실행 트랜잭션은 내부의 마지막 문이 완료될 때 커밋된 것으로 간주됩니다. 트랜잭션이 중단되는 경우에는 상태를 자동 롤백하지 않습니다. 이 샘플에 나와 있는 예외 및 보정 처리기를 통해 프로그래밍 방식으로 이 작업을 수행할 수 있습니다.
catch 블록에는 10초 동안 하나의 지연 셰이프가 설정됩니다. 이 셰이프 집한은 보정 작업을 지연합니다. Upd_Backend 트랜잭션에서 보 정 작업을 시작하는 보정 셰이프도 있습니다.
오케스트레이션에서 입력 메시지를 수신하면 다음과 같은 결과가 나타납니다.
UpdateCrm 어셈블리가 Northwind 데이터베이스의 행을 업데이트합니다.
UpdateMailingList 어셈블리가 BTSCompensationSampleMailingList 데이터베이스에서 일치하는 레코드를 업데이트합니다.
Northwind 데이터베이스를 업데이트하는 도중에 실패가 발생할 경우, 예외가 발생하게 되며 오케스트레이션에서는 해당 프로세스를 종료합니다.
BTSCompensationSampleMailingList 데이터베이스를 업데이트하는 도중에 실패가 발생할 경우 예외가 발생하게 되며 원래 고객 데이터를 Northwind 데이터베이스에 다시 기록하기 전에 10초 지연이 발생합니다.
이 샘플이 있는 위치
< 샘플 경로>\Orchestrations\Compensation\
다음 표는 이 샘플의 파일을 보여 주고 각각의 용도에 대해 설명합니다.
파일 | Description |
---|---|
Cleanup.bat | 샘플을 제거하는 데 사용되는 일괄 처리 파일 |
CompensationOrchestration.btproj | 오케스트레이션 프로젝트. |
CompensationSample.sln | 샘플 솔루션. |
CompensationSampleBinding.xml | 오케스트레이션에 대한 바인딩 데이터(설치 중에 사용됨). |
ContactInfo.xsd | 연락처 정보 메시지 스키마. |
ContactInfo.xsx | 오케스트레이션 디자이너 레이아웃 파일. |
CreateSQLDataStore.sql | 샘플 데이터베이스를 만들고 채우는 SQL 스크립트. |
CrmSchema.xsd | CRM 업데이트 메시지 스키마. |
MailingListSchema.xsd | 메일 그룹 메시지 업데이트 스키마. |
RemoveVirDir.vbs | 웹 서비스의 가상 및 실제 디렉터리를 제거하는 Microsoft Visual Basic Scripting Edition(VBScript) 스크립트(설치 중에 사용됨). |
Request2Crm.btm | 요청(연락처 정보)을 CRM 업데이트 메시지로 변환하는 메시지 맵. |
Request2MailingList.btm | 요청(연락처 정보)을 메일 그룹 메시지로 변환하는 메시지 맵. |
Setup.bat | 이 샘플을 설치하는 일괄 처리 파일. |
UpdateContact.odx | 오케스트레이션 파일. |
UpdateRequest2UpdateResponse.btm | 요청(연락처 정보)을 응답 메시지로 변환하는 메시지 맵. |
UpdateResponse.xsd | 응답 메시지 스키마. |
InfoPath\Contact Info Update.xsn | 양식을 오케스트레이션 웹 서비스로 전송하는 데 사용되는 Microsoft InfoPath 파일. |
UpdateCrm\AssemblyInfo.cs | UpdateCrm 어셈블리에 대한 어셈블리 정보 소스 파일. UpdateCrm 어셈블리는 Northwind 데이터베이스를 업데이트합니다. |
UpdateCrm\UpdateCrm.cs | UpdateCrm 어셈블리에 대한 주 소스 코드. |
UpdateCrm\UpdateCRM.csproj | UpdateCrm 프로젝트 파일. |
UpdateMailingList\AssemblyInfo.cs | UpdateMailingList 어셈블리에 대한 어셈블리 정보 소스 파일. UpdateMailingList 어셈블리는 샘플 데이터베이스를 업데이트합니다. |
UpdateMailingList\UpdateMailingList.cs | UpdateMailingList 어셈블리에 대한 주 소스 코드. |
UpdateMailingList\UpdateMailingList.csproj | UpdateMailingList 프로젝트 파일. |
이 샘플 빌드 및 초기화
보정 샘플을 빌드하고 초기화하려면
Visual Studio 명령 창에서 다음 폴더로 이동합니다.
< 샘플 경로>\Orchestrations\Compensation\
다음 작업을 수행하는 Setup.bat를 실행합니다.
샘플 어셈블리를 빌드하고 배포합니다.
BizTalk 웹 서비스 게시 마법사가 시작되면 수동으로 다음을 수행합니다.
BizTalk Web Services 게시 마법사 시작 페이지에서 다음을 클릭합니다.
웹 서비스 만들기 페이지에서 BizTalk 오케스트레이션을 웹 서비스로 게시를 선택하고 다음을 클릭합니다.
BizTalk 어셈블리 페이지에서 샘플 경로>\Orchestrations\Compensation\bin\Release\CompensationOrchestration.dll 찾아 선택한 < 다음 다음을 클릭합니다.
오케스트레이션 및 포트 페이지에서 다음을 클릭합니다.
웹 서비스 속성 페이지의 웹 서비스의 대상 네임스페이스에 를 입력
http://Microsoft.BizTalk.Samples.Compensation/
하고 다음을 클릭합니다.웹 서비스 프로젝트 페이지의 위치에 를 입력합니다
http://localhost/CompensationOrchestrationWebServiceProxy
.웹 서비스에 대한 익명 액세스 허용 검사 상자를 선택합니다.
다음 애플리케이션 검사 상자에서 BizTalk 수신 위치 만들기를 선택합니다.
다음 애플리케이션 드롭다운 메뉴의 BizTalk 수신 위치 만들기 드롭다운 목록에서 BizTalk 애플리케이션 1 을 선택하고 다음을 클릭합니다.
웹 서비스 프로젝트 요약 페이지에서 만들기를 클릭합니다.
BizTalk Web Services 게시 마법사 완료 페이지에서 마침을 클릭합니다.
설치 프로그램이 포트를 만들어 바인딩하고 샘플에 대한 백 엔드 데이터베이스를 만들며 C# 어셈블리를 전역 어셈블리 캐시에 추가합니다.
참고
이 샘플을 실행하기 전에 BizTalk Server가 빌드 및 초기화 프로세스 동안 오류를 보고하지 않았는지 확인해야 합니다.
이 샘플 실행
이 샘플을 빌드 및 초기화한 후 실행하기 전에 다음 사항을 고려하십시오.
Windows Server 2008 SP2 또는 Windows Server 2008 R2에서 이 샘플을 실행하는 경우 IIS 애플리케이션 풀을 만들고 해당 ID를 BizTalk 애플리케이션 사용자 Windows 그룹의 구성원인 계정으로 설정해야 합니다. 또한 이 응용 프로그램 풀 내에서 실행할 오케스트레이션 웹 서비스 가상 디렉터리도 업데이트해야 합니다.
BizTalk Isolated 호스트 사용자 그룹에 ASPNET 계정을 추가합니다.
BizTalk 애플리케이션 사용자 그룹 db_owner BTSCompensationSampleMailingList 및 Northwind 데이터베이스에 대한 권한을 부여합니다.
기본 위치(drive:\Program Files\Microsoft BizTalk Server version>\)에 BizTalk Server <설치되어 있지 않은 경우 사용하기 전에 연락처 정보 업데이트.xsn 양식을 게시해야 합니다. 이렇게 하려면 다음을 수행합니다.
InfoPath 양식을 게시하려면
Internet Explorer의 도구 메뉴에서 인터넷 옵션을 클릭합니다.
보안 탭에서 인터넷을 클릭한 다음 사용자 지정 수준을 클릭합니다.
기타 섹션에서 도메인 간 데이터 원본 액세스 설정이 사용하도록 설정되어 있는지 확인하고 확인을 클릭합니다. InfoPath 사용자 인터페이스 솔루션 스크립팅 코드를 실행하려면 이 설정이 필요합니다.
Windows Explorer 샘플 경로>\Orchestrations\Compensation\InfoPath로 이동하고 <연락처 정보 Update.xsn을 마우스 오른쪽 단추로 클릭한 다음 디자인을 클릭합니다.
InfoPath Contact Info Update 솔루션이 디자인 모드에서 열립니다.
InfoPath 연락처 정보 업데이트 애플리케이션의 파일 메뉴에서 게시를 클릭합니다.
게시 마법사가 나타납니다.
이 컴퓨터 또는 네트워크의 공유 폴더로를 선택하고 솔루션을 Samples Path>\Orchestrations\Compensation\InfoPath\Contact Info Update.xsn 경로 < 에 게시합니다.
디자인 모드 InfoPath를 닫습니다.
이제 이 샘플을 실행할 준비가 되었습니다.
보정 샘플을 실행하려면
InfoPath에서 연락처 정보 Update.xsn을 두 번 클릭하여 엽니다.
두 데이터베이스에 있는 계정에 대한 양식을 채웁니다. 예를 들어 Northwind Customers 테이블에서 기존 계정 ID "ALFKI"를 사용합니다.
파일 메뉴에서 제출을 선택하고 제출을 클릭합니다.
응답 문서는 Samples Path>\Orchestrations\Compensation\Out 폴더에 < 표시되어야 하며 Northwind 및 BTSCompensationSampleMailingList 데이터베이스는 InfoPath 양식의 새 데이터로 업데이트해야 합니다.
참고
BTSCompensationSampleMailingList 데이터베이스를 분리하거나 오프라인으로 전환하여 오케스트레이션에서 수행하는 보정 작업을 테스트할 수 있습니다. 먼저 Northwind 데이터베이스에서 레코드가 업데이트되었는지 관찰합니다. 그런 다음 오케스트레이션에서 BTSCompensationSampleMailingList 데이터베이스 업데이트를 시도하면 데이터베이스 분리로 인해 업데이트에 실패합니다. 따라서 예외가 발생하고 10초 지연되었다가 원래 고객 데이터를 Northwind 데이터베이스에 다시 기록하는 보정 작업이 수행됩니다.
참고
"사용자 'IIS APPPOOL\DefaultAppPool'이(가) 로그인하지 못했습니다." 오류가 발생할 수 있습니다. 토큰 기반 서버 액세스 유효성 검사 실패 때문일 수도 있습니다. 이 오류를 해결하려면 새로운 응용 프로그램 풀을 만들고 그 응용 프로그램 풀에서 관리자 계정을 사용합니다.
이 샘플 제거
보정 샘플을 제거하려면
Visual Studio 명령 창에서 다음 폴더로 이동합니다.
< 샘플 경로>\Orchestrations\Compensation\
Cleanup.bat를 실행합니다.