Interoperating with WSE
이 샘플에서는 Web Service Enhancements(WSE) 3.0 서비스와 WCF(Windows Communication Foundation) 클라이언트 또는 서비스 간에 상호 운용성을 실현할 수 있는 방법을 보여 줍니다.
이 샘플에서는 WseHttpBinding이라는 사용자 지정 바인딩을 구현합니다. 이 바인딩에서는 WSE 3.0 정책 파일을 사용하여 WCF 클라이언트나 서비스를 구성하고 WSE 3.0과의 상호 운용성을 실현할 수 있습니다. WseHttpBinding에서는 정책 파일의 WSE 3.0 속성을 WCF 바인딩의 속성으로 매핑하여 이 작업을 수행합니다. WseHttpBinding은 스택에 있는 다른 바인딩의 속성, 특히 SecurityBindingElement에 대해 제약된 뷰를 제공하므로 표준 바인딩과 유사한 것으로 간주할 수 있습니다.
샘플은 두 부분으로 구분됩니다. 첫 번째 부분에서는 WseHttpBinding을 사용하여 WCF 클라이언트에서 WCF 자체 호스팅 서비스로 호출하는 방법을 보여 줍니다. 두 번째 부분에서는 WSE 3.0 SDK를 설치해야 합니다.
WCF 클라이언트와 서비스 간에 WseHttpBinding 사용
클라이언트의 CallWcfService
메서드는 WseHttpBinding의 인스턴스를 만들고 클라이언트의 보안 요구 사항에 대한 속성을 설정합니다.
static void Main(string[] args)
{
CallWcfService();
...
}
다음 코드와 같이 이러한 요구 사항은 서비스의 Main
함수 내에 설정된 값과 일치해야 합니다.
//Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
//Create and configure the WseHttpBinding.
WseHttpBinding binding = new WseHttpBinding();
binding.SecurityAssertion = WseSecurityAssertion.AnonymousForCertificate;
binding.EstablishSecurityContext = true;
binding.RequireDerivedKeys = true;
binding.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt;
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, "");
ServiceCredentials creds = new ServiceCredentials();
creds.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine,
StoreName.My, X509FindType.FindBySubjectName, "localhost");
serviceHost.Description.Behaviors.Add(creds);
serviceHost.Open();
...
}
샘플을 설치, 빌드 및 실행하려면
Windows Communication Foundation 샘플의 일회 설치 절차를 수행했는지 확인합니다.
C# 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.
단일 컴퓨터 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.
이 샘플의 서비스는 자체 호스팅됩니다. 따라서 클라이언트를 실행하기 전에 /service/bin 디렉터리에서 Service.exe 파일을 실행해야 합니다.
WSE 3.0 서비스와의 통신에 WseHttpBinding 사용
이 프로젝트의 클라이언트를 사용하면 WSE 3.0 SDK의 퀵 스타트 샘플과도 통신할 수 있습니다.
WSE 3.0 SDK를 설치하면 Svcutil.exe 도구를 사용하여 서비스가 빌드된 후 WSE 3.0 서비스와 통신하는 데 사용할 수 있는 클라이언트를 생성할 수 있습니다. 다음 예제에서는 로컬 컴퓨터에서 실행되는 WSE 3.0 서비스를 사용하여 이 작업을 수행하는 방법을 보여 줍니다.
svcutil.exe /out:wseproxy.cs /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" https://localhost/WSSecurityAnonymousPolicy/WSSecurityAnonymousService.asmx
Wseproxy.cs 파일은 이 프로젝트에 포함되어 있습니다. 생성된 프록시 클래스 이름은 WSSecurityAnonymousServiceSoapProxy
이며 코드의 속성을 사용하거나 Wse3PolicyCache.config 구성 파일에서 로드된 WSE 3.0 정책 파일을 사용하여 구성된 WseHttpBinding을 제공합니다. Wse3PolicyCache.config 구성 파일도 이 프로젝트에 포함되어 있습니다.
WSE 3.0 WSSecurityAnonymous 샘플이 성공적으로 빌드된 경우 클라이언트를 실행하면 WSE 3.0 서비스에서 주식 시세가 안전하게 반환됩니다.
WSE 3.0의 설치 지침은 이 항목의 끝부분에 자세하게 설명되어 있습니다.
클라이언트에서 CallWcfService
에 대한 호출을 주석으로 처리하고 CallWseService
에 대한 코드의 주석 처리를 제거합니다. true나 false를 전달하면 XmlReader를 사용하여 WSE 3.0 정책 파일을 구문 분석하는 LoadPolicy(String filename, String policyName)
메서드를 호출함으로써 WseHttpBinding을 구성하는 데 정책 파일이 사용되는지 여부를 결정할 수 있습니다.
참고
XmlReader를 사용하여 정책 파일을 로드하지 않고 클라이언트에 WSE 3.0을 설치한 경우에는 WSE 3.0 Microsoft.Web.Services3.Design.Policies 클래스를 사용하는 코드를 수정하여 정책을 로드할 수 있습니다. 이 방법을 사용하면 Microsoft.Web.Services3.Design.Policies 클래스에서 모든 유효한 형식의 WSE 3.0 정책 파일을 구문 분석한 다음 WseHttpBinding에 제공할 수 있다는 장점이 있습니다. XmlReader 형식을 사용하는 코드를 사용하면 제한된 정책 파일 집합만 구문 분석할 수 있습니다.
WSE 3.0에서 샘플을 설치, 빌드 및 실행하려면
Microsoft .NET용 Web Services Enhancements(WSE) 3.0(영문 페이지일 수 있음)에서 WSE 3.0 제품을 설치합니다.
WSE 샘플을 구성하고 설치하는 방법에 대한 WSE 3.0 퀵 스타트 샘플 가이드를 읽습니다. 이 작업을 수행하려면 올바른 X.509 인증서를 설치하고 IIS(인터넷 정보 서비스)에서 웹 서비스를 호스팅할 가상 디렉터리를 만들어야 합니다. 특히 기본 설치 디렉터리 C:\Program Files\Microsoft WSE\v3.0\Samples에서 Setup.bat 파일을 실행합니다.
다음 디렉터리에 기본적으로 설치되는 WSE 3.0 퀵 스타트 정책 샘플 WSSecurityAnonymous를 빌드합니다. 참고: 코드 전용 버전의 WSSecurityAnonymous가 있어서 이를 대신 사용하려는 경우 작동합니다. 코드 전용 버전을 사용하려면 클라이언트에서 서비스의 URL을 https://localhost/WSSecurityAnonymousCode/WSSecurityAnonymousService.asmx로 변경해야 합니다.
WSE 3.0 프로젝트는 C:\Program Files\Microsoft WSE\v3.0\Samples\CS\QuickStart\Security\WSSecurityAnonymous\Policy에 설치됩니다.
이 상호 운용 샘플의 WCF 클라이언트는 WSE 3.0 퀵 스타트 샘플과 상호 운용되도록 디자인되었습니다.
Client.cs 파일의
Main
함수에서CallWseService
메서드에 대한 호출의 주석 처리를 제거합니다.CallWcfService
에 대한 호출을 주석 처리하여 WCF 서비스가 호출되지 않도록 할 수도 있습니다.C# 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.
단일 컴퓨터 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.
WSE 3.0 다중 컴퓨터 구성에서 샘플을 설치, 빌드 및 실행하려면
먼저 WSE 3.0 서비스를 설정합니다. Microsoft .NET용 Web Services Enhancements(WSE) 3.0(영문 페이지일 수 있음)에서 원격 컴퓨터에 WSE 3.0 제품을 설치합니다.
WSE 샘플을 구성하고 설치하는 방법에 대한 WSE 3.0 퀵 스타트 샘플 가이드를 읽습니다. 이 작업을 수행하려면 올바른 X.509 인증서를 설치하고 IIS(인터넷 정보 서비스)에서 웹 서비스를 호스팅할 가상 디렉터리를 만들어야 합니다. 특히 기본 설치 디렉터리 C:\Program Files\Microsoft WSE\v3.0\Samples에서 Setup.bat 파일을 실행합니다.
다음 디렉터리에 기본적으로 설치되는 WSE 3.0 퀵 스타트 정책 샘플 WSSecurityAnonymous를 빌드합니다.
참고
코드 전용 버전의 WSSecurityAnonymous가 있어서 이를 대신 사용하려는 경우 작동합니다.
WSE 3.0 프로젝트는 C:\Program Files\Microsoft WSE\v3.0\Samples\CS\QuickStart\Security\WSSecurityAnonymous\Policy에 설치됩니다.
서버를 설정한 경우에는 다른 컴퓨터에 WCF 클라이언트를 설정하지 않습니다. MMC 도구를 사용하여 WSE 3.0을 설치한 LocalMachine/Personal 인증서 저장소에 있는 WSE2QuickStartServer 인증서를 모든 작업->상황에 맞는 메뉴의 내보내기 옵션을 사용하여 파일로 내보냅니다. 개인 키는 내보낼 필요가 없으며 공개 키만 내보내 .CER 파일을 만듭니다. MMC 인증서 관리 스냅인을 사용하여 인증서 저장소의 인증서를 보는 방법에 대한 자세한 내용은 WSE 3.0 C:\Program Files\Microsoft WSE\v3.0\Samples 디렉터리의 readme.htm 파일을 참조하십시오.
서버 컴퓨터에서 .CER 파일을 클라이언트 컴퓨터에 복사하고 공용 인증서를 CurrentUser/Trusted People 인증서 저장소로 가져옵니다. MMC 인증서 관리 스냅인을 사용하는 방법에 대한 자세한 내용은 WSE 3.0 C:\Program Files\Microsoft WSE\v3.0\Samples 디렉터리의 readme.htm 파일을 참조하십시오.
참고
WSE 3.0 setup.bat 파일을 실행하면 WSE2QuickStartServer 서버 인증서가 인증서 저장소 간에 자동으로 복사됩니다.
다중 컴퓨터 구성에서 샘플을 실행하려면 WCF 클라이언트에 대한 Windows Communication Foundation 샘플 실행의 지침을 따르고 localhost 대신 WSE 3.0 서비스의 주소를 사용하도록 클라이언트를 구성합니다. 예를 들어, "mymachine"이라는 시스템에서 주소는 기본적으로 http://mymachine/WSSecurityAnonymousPolicy/WSSecurityAnonymousService.asmx가 됩니다.
Client.cs 파일의
Main
함수에서CallWseService
메서드에 대한 호출의 주석 처리를 제거합니다.CallWcfService
에 대한 호출을 주석 처리하여 WCF 서비스가 호출되지 않도록 할 수도 있습니다.C# 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.
클라이언트를 실행합니다.
샘플 실행 후 정리를 수행하려면
- 클라이언트나 서버에서 인증서를 제거하려면 MMC 도구를 사용합니다. 서버의 C:\Program Files\Microsoft WSE\v3.0\Samples 디렉터리에서 Cleanup.bat 파일을 실행할 수도 있습니다.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.