WCF 수신 어댑터를 사용하여 WCF 서비스를 게시할 때의 고려 사항
이 항목은 WCF 수신 어댑터를 사용하여 WCF 서비스를 게시할 때 고려해야 할 정보를 제공합니다. WCF 어댑터를 사용하여 서비스를 게시하면 일반적인 WCF 서비스인 것처럼 WCF 클라이언트에서 호출할 수 있습니다.
In-process 호스팅
btsntsvc.exe BizTalk Server 프로세스 공간 내에서 수신 위치를 호스팅하면 간소화된 개발 및 배포의 이점을 얻을 수 있습니다. 또한 IIS에서 호스팅하는 것보다 더 많은 호스트 인스턴스를 만들어 BizTalk Server 고가용성 및 부하 분산 기능을 활용합니다. IIS의 BizTalk Server 프로세스 외부에서 호스팅하는 방법에 대한 자세한 내용은 격리된 WCF 수신 어댑터에 대한 IIS 구성을 참조하세요.
WCF 어댑터(WCF-NetMsmq 수신 어댑터 제외)를 사용하여 게시된 WCF 서비스의 IsOneWay 속성을 false로 설정
WCF 어댑터와 함께 게시된 WCF 서비스의 System.ServiceModel.OperationContractAttribute.IsOneWay 속성은 true 로 설정된 WCF-NetMsmq 수신 어댑터와 함께 게시된 서비스를 제외하고 단방향 수신 위치에 대해서도 false 로 설정됩니다. IsOneWay 속성이 false로 설정된 경우 void를 반환하는 메서드도 회신 메시지를 생성합니다. 이 경우 인프라에서 빈 메시지를 만들고 전송하여 호출자에게 메서드가 반환되었음을 나타냅니다. 이 접근 방법을 사용하면 인프라에서는 서비스 작업에서 throw된 예외를 클라이언트로 다시 보낼 수 있습니다.
IsOneWay가 false인 WCF 어댑터(WCF-NetMsmq 수신 어댑터 제외)와 함께 게시된 WCF 서비스를 사용하려면 클라이언트 쪽의 IsOneWay 속성을 다음과 같이 false로 설정해야 합니다.
[ServiceContract(Namespace="Microsoft.WCF.Documentation")]
public interface ISampleService{
[OperationContract(IsOneWay=false, ReplyAction="*",Action="…"]
string SampleMethod(string msg);
}
참고
IsOneWay 속성의 기본값은 false이므로 코드에서 속성을 지정할 필요가 없습니다.
단방향 수신 위치로 게시된 WCF 서비스를 사용할 때 클라이언트 측 OperationContractAttribute의 ReplyAction 속성을 "*"(별표)로 설정해야 함
System.ServiceModel.OperationContractAttribute의 System.ServiceModel.OperationContractAttribute.ReplyAction 속성을 클라이언트 쪽에서 사용하여 WCF 서비스의 응답 메시지에 대한 SOAP 동작 값을 지정할 수 있습니다.
응답 메시지(클라이언트에게 이 메시지는 응답이며 수행할 작업을 알림)의 작업 헤더에 특정 값을 지정하는 것 외에도 문자열 "*"(별표)를 지정할 수도 있습니다. 클라이언트 응용 프로그램에 별표를 지정하는 것은 클라이언트에게 서비스가 보내는 응답 메시지에서 응답 작업의 유효성을 검사하지 않도록 지시하는 것입니다.
단방향 수신 위치에서 게시한 WCF 서비스를 사용하려면 WCF 서비스의 프록시 메서드가 void를 반환해야 합니다. 이 경우 프록시 메서드는 WCF 서비스가 메서드가 반환되었음을 호출자에게 나타내는 빈 메시지를 보낼 것으로 예상합니다. 프록시 메서드가 이 빈 메시지를 수신하려면 OperationContractAttribute의 ReplyAction 속성을 다음과 같이 "*"(별표)로 설정해야 합니다.
[ServiceContract(Namespace="Microsoft.WCF.Documentation")]
public interface ISampleService{
[OperationContract(IsOneWay=false, ReplyAction="*",Action="…"]
string SampleMethod(string msg);
}
참고
WCF-NetMsmq 어댑터에 IsOneWay 속성을 true로 설정하려면 WCF 클라이언트가 필요하므로 WCF-NetMsmq 어댑터에 대해 ReplyAction 속성을 "*"(별표)로 설정할 필요가 없습니다.
Isolated 호스트 인스턴스는 한 개의 어댑터만 실행 가능
Isolated 호스트 인스턴스는 한 개의 어댑터만 실행할 수 있습니다. 한 개의 Isolated 호스트에서 HTTP, SOAP 및 WCF 어댑터와 같은 여러 Isolated 어댑터의 수신 핸들러를 구성하는 경우 각 어댑터에 대해 하나씩 여러 개의 응용 프로그램 풀을 만들어야 합니다. BizTalk 격리 호스트에 대한 자세한 내용은 웹 서비스 사용을 참조하세요.
비-XML 콘텐츠를 응답 메시지로 보내는 경우 "템플릿 -- 템플릿에서 지정한 내용" 옵션 사용
본문 -- BizTalk 응답 메시지 본문(기본값) 옵션을 사용하는 WCF 어댑터는 문자 데이터 및 비트맵 이미지와 같은 비 XML 메시지 전송을 허용하지 않습니다. WCF 어댑터에 대해 템플릿 -- 템플릿 옵션으로 지정된 콘텐츠를 사용하여 비 XML 메시지를 보낼 수 있습니다. 템플릿을 사용하는 방법에 대한 자세한 내용은 WCF 어댑터에 대한 메시지 본문 지정을 참조하세요.
WCF 서비스 게시 마법사를 사용하여 게시된 WCF 서비스의 권한 설정
Windows Server 2008 SP2 또는 Windows Server 2008 R2 플랫폼에서 WCF 서비스 게시 마법사로 만든 ASP.NET 애플리케이션을 사용하는 경우 WCF 서비스 호출 중 DLL 액세스와 관련된 오류가 발생할 수 있습니다. 이러한 오류는 일반적으로 기본 Windows Server 2008 SP2 및 Windows Server 2008 R2 보안 문제와 관련이 있습니다. 이러한 오류에 대한 자세한 내용은 의 도움말 및 지원 웹 사이트에서 https://go.microsoft.com/fwlink/?LinkId=43659"클라이언트 애플리케이션이 웹 서비스를 호출할 때 "System.IO.FileNotFoundException" 오류 수신"이라는 Microsoft 도움말 및 지원 문서를 참조하세요.
BizTalk Server WCF 서비스를 실행하는 프로세스에 in-process 호스트 또는 격리된 호스트가 서비스를 실행하는지 여부에 관계없이 적절한 권한이 부여되어야 합니다. Windows Server 2008 SP2 및 Windows Server 2008 R2에서 격리된 호스트에 대한 기본 Windows 그룹은 격리된 호스트 사용자 그룹이므로 격리된 호스트 사용자 그룹에 권한을 추가하는 것은 이 문제를 resolve 합니다.
Isolated 호스트 사용자 그룹에 권한을 추가하려면
Microsoft Windows 탐색기에서 %windir%\temp 디렉터리를 찾습니다.
%windir%\temp를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
속성 대화 상자에서 보안 탭을 클릭합니다.
추가를 클릭하고 격리된 호스트 사용자 그룹을 선택한 다음 확인을 클릭합니다.
WCF-NetMsmq 어댑터를 사용하여 WCF 수신 위치에 대한 권한 설정
NetMsmqBinding을 사용하는 WCF 클라이언트에서 WCF-NetMsmq 어댑터를 사용하여 게시된 WCF 서비스로 메시지를 보내는 경우 대상 큐, 즉 서비스 큐 관리자가 관리하는 큐로 메시지 주소를 지정합니다. 클라이언트의 큐 관리자에서는 메시지를 전송 큐(또는 나가는 큐)로 보냅니다. 전송 큐는 전송용 메시지를 대상 큐에 저장하는 클라이언트 측 큐 관리자에 있는 큐입니다.
서비스의 큐 관리자는 소유한 대상 큐로 주소가 지정된 메시지를 받아 저장합니다. 그러면 서비스는 대상 큐로부터 읽기 위한 요청을 하고 큐 관리자는 메시지를 서비스로 배달합니다. 이러한 이유로 수신 위치를 호스팅하는 BizTalk 호스트 인스턴스용 서비스 계정에는 대상 큐에서 읽을 수 있는 권한이 있어야 합니다.
빈 본문 경로 식을 사용하여 SOAP Body 요소의 콘텐츠에서 문자 데이터가 포함된 SOAP 메시지 수신
WCF 수신 어댑터가 SOAP Body 요소의 내용에 문자 데이터가 포함된 들어오는 응답 메시지에서 BizTalk 메시지를 만들려면 다음 예제와 같이 WCF 어댑터 전송 속성 대화 상자의 메시지 탭에 본문 경로 식 텍스트 상자를 비워 두어야 합니다.
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
...
</s:Header>
<s:Body>Contoso</s:Body>
</s:Envelope>
봉투 또는 본문 옵션을 선택하면 어댑터가 이전 수신 메시지에서 BizTalk 메시지를 만들 수 없습니다. 인바운드 SOAP 마샬링 처리에서 실패한 메시지가 일시 중단되지 않으므로 메시지는 일시 중단되지 않습니다. 메시지 탭에서 본문 경로 식을 사용하는 방법에 대한 자세한 내용은 WCF 어댑터에 대한 메시지 본문 지정을 참조하세요.
참고
BTSNTSvc.exe.config.file을 구성하여 Windows SDK에서 TraceViewer 도구(SvcTraceViewer.exe)를 사용할 수 있습니다. Windows SDK에 대한 자세한 내용은 의 "Windows SDK의 새로운 기능" https://go.microsoft.com/fwlink/?LinkId=75219을 참조하세요. TraceViewer 도구에 대한 자세한 내용은 의 "TraceViewer 도구(SvcTraceViewer.exe)"를 https://go.microsoft.com/fwlink/?LinkId=75218참조하세요.
다른 스키마를 참조하는 스키마 사용
스키마가 크고 복잡해지거나 다양한 유형의 instance 메시지를 나타내는 스키마에 공통적인 부분이 있는 경우 요소를 다시 정의, 포함 및 가져올 수 있습니다. 보다 작은 스키마를 결과적으로 거래 업체와 교환할 인스턴스 메시지 구조를 정의하는 스키마로 결합하는 것이 유용할 수 있습니다. BizTalk WCF 서비스 게시 마법사를 사용하여 이러한 스키마를 WCF 서비스로 게시할 수 있습니다.
BizTalk WCF 서비스 사용 마법사를 사용하여 BizTalk 프로젝트에서 WCF 서비스를 사용하는 데 필요한 BizTalk 아티팩트를 만들어야 합니다. .NET 응용 프로그램에서 WCF 서비스를 사용하려면 Service Model Metadata 유틸리티 도구(Svcutil.exe)를 사용하여 WCF 서비스에 대한 프록시 클래스를 만들어야 합니다. 다른 스키마를 참조하는 스키마를 사용하는 방법에 대한 자세한 내용은 다른 스키마를 사용하는 스키마 및 다른 스키마를 사용하는 스키마를 만드는 방법을 참조하세요. Svcutil.exe 대한 자세한 내용은 의 "서비스 모델 메타데이터 유틸리티 도구(Svcutil.exe)" https://go.microsoft.com/fwlink/?LinkID=74696를 참조하세요.
다음 표는 다른 스키마를 사용하는 스키마를 통해 게시된 WCF 서비스를 사용할 경우 알아야 할 제한 사항과 고려 사항을 보여 줍니다.
XML 스키마 요소 | BizTalk WCF 서비스 게시 마법사로 게시된 WCF 서비스 사용 | .NET 응용 프로그램에서 호스팅한 WCF 서비스 사용 |
---|---|---|
<import> | BizTalk WCF 서비스 사용 마법사 및 Svcutil.exe 모두에서 지원됨 | BizTalk WCF 서비스 사용 마법사 및 Svcutil.exe 모두에서 지원됨 |
<include> | BizTalk WCF 서비스 사용 마법사와 Svcutil.exe 모두 지원 됩니다. Svcutil.exe 프록시 클래스를 만들 때 경고 메시지가 발생할 수 있습니다. | BizTalk WCF 서비스 사용 마법사와 Svcutil.exe 모두 지원 됩니다. Svcutil.exe 프록시 클래스를 만들 때 경고 메시지가 발생할 수 있습니다. |
<redefine> | - BizTalk WCF 서비스 사용 마법사에서 지원됨 - Svcutil.exe 제한된 지원 참고: Svcutil.exe XSD.exe 있는 것과 동일한 제한 사항이 있습니다. |
BizTalk WCF 서비스 사용 마법사와 Svcutil.exe 모두 지원 됩니다. Svcutil.exe 프록시 클래스를 만들 때 경고 메시지가 발생할 수 있습니다. |
참고
Svcutil.exe include 및 redefine 요소를 사용하여 스키마를 사용하여 게시된 BizTalk WCF 서비스에 대해 프록시 클래스를 만들 때 경고 메시지를 표시할 수 있습니다. (예: "전역 요소가 이미 선언되었습니다.").
서비스 엔드포인트 주소에서 컴퓨터 이름 부분을 변경하고 나면 In-process WCF 수신 위치가 사용되지 않는지 확인
실행 중인 In-Process WCF 수신 위치의 주소(URI) 텍스트 상자에서 컴퓨터 이름 부분을 변경하는 경우 BizTalk 관리 콘솔을 사용하여 수신 위치가 여전히 실행 중인지 여부를 검사 것이 좋습니다. 예를 들어 WCF-NetTcp 수신 어댑터 net.tcp://Your Computer Name>/samplepath를 사용하여 서비스 엔드포인트 주소를 net.tcp://<localhost/samplepath로 변경하는 경우 Service.InvalidOperationException을 사용하여 수신 위치를 사용하지 않도록 설정할 수 있습니다. 경로 부분을 수정하지 않고 서비스 엔드포인트 주소의 컴퓨터 이름 부분만 변경하는 경우 수신 위치가 사용되지 않은지 그리고 필요한 경우 사용할 수 있는지 확인합니다.
트랜잭션 프로토콜을 통해 원격 WCF 수신 위치와 통신하는 클라이언트 컴퓨터에 적절한 MSDTC 보안 구성 옵션 설정
WCF-NetTcp, WCF-WSHttp 및 WCF-NetNamedPipe 수신 어댑터는 WCF 클라이언트가 WS-AtomicTransaction 및 OleTransaction 트랜잭션 프로토콜을 사용하여 관리하는 트랜잭션 조정 프로세스에 참여할 수 있습니다. 트랜잭션 프로토콜을 사용하여 트랜잭션 컨텍스트의 메시지가 대상 수신 위치로 전송되고 MessageBox 데이터베이스에서 삭제될 수 있습니다.
트랜잭션 프로토콜을 사용하여 원격 WCF 수신 위치와 통신하려면 WCF 클라이언트 컴퓨터에서 MSDTC 보안 구성 옵션을 적절하게 구성해야 합니다. 다음 표에서는 MSDTC 보안 구성 대화 상자에서 사용할 수 있는 옵션에 필요한 값을 나열합니다.
구성 옵션 | 기본값 | 권장되는 값 |
---|---|---|
네트워크 DTC 액세스 | 사용 안 함 | 사용 |
아웃바운드 허용 | 사용 안 함 | 사용 |
상호 인증 필요 | 사용 | 해당 원격 수신 위치가 Windows Server 2003 SP1 또는 SP2를 실행하고 상호 인증 필요로 구성된 경우 사용하도록 설정됩니다. |
들어오는 호출자 인증 필요 | 사용 안 함 | 클러스터에서 MSDTC를 실행하는 경우 사용합니다. |
이러한 변경 사항을 적용하고 나면 MSDTC 서비스를 다시 시작해야 합니다.
MSDTC 보안 구성 대화 상자에 액세스하려면 다음 단계를 수행합니다.
시작을 클릭하고 실행을 클릭한 다음 dcomcnfg를 입력하여 구성 요소 서비스 관리 콘솔을 시작합니다.
구성 요소 서비스, 컴퓨터를 차례로 확장한 다음 내 컴퓨터를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
내 컴퓨터 속성 대화 상자에서 MSDTC 탭을 클릭한 다음 보안 구성을 클릭하여 보안 구성 대화 상자를 표시합니다.
BizTalk WCF 서비스 게시 마법사를 사용할 경우 SOAP 래퍼 설명
오케스트레이션이 WCF 서비스 게시 마법사를 사용하여 WCF(Windows Communication Foundation) 서비스로 노출되면 래퍼가 생성됩니다. 이 래퍼는 XML 메시지에서 메시지가 전송된 포트의 메서드 이름을 사용합니다. 이 래퍼는 Microsoft SOAP 봉투(Envelope)에 대한 기본값입니다. 이를 통해 WCF는 여러 부분으로 구성된 SOAP 메시지를 하나의 WCF 메시지로 래핑하여 어댑터를 통해 엔드포인트로 전송할 수 있습니다.
가장 좋은 방법은 발신자가 래퍼를 사용해야 하고 받는 사람에게 래퍼가 필요한 경우 또는 발신자가 래퍼를 사용하지 않아야 하며 수신자는 원시 WCF 메시지를 예상해야 합니다. 래퍼 사용 여부에 대해 미리 동의하지 않으면 보낸 항목과 받은 항목 간에 호환되지 않는 문제가 발생할 수 있습니다.