COM+ Integration: Web-Hosted
이 샘플에서는 COM+ 응용 프로그램에서 인터페이스를 WCF(Windows Communication Foundation) 서비스로 노출하는 방법과 WCF 클라이언트에서 이 인터페이스를 호출하는 방법을 보여 줍니다. 이 샘플은 클라이언트 콘솔 프로그램(.exe)과 COM+ 내에 등록된 엔터프라이즈 서비스 라이브러리 응용 프로그램(.dll)으로 구성됩니다.
참고
이 샘플의 설치 절차 및 빌드 지침은 이 항목의 끝부분에 나와 있습니다.
참고
이 샘플의 Visual Basic 버전은 서버 응용 프로그램으로 구성되고 out of process로 호스팅되어 64비트 버전의 Windows 운영 체제에서 실행되어야 합니다. 샘플을 서버 응용 프로그램으로 구성하는 방법에 대한 자세한 내용은 COM+ 응용 프로그램 구성(영문 페이지일 수 있음)을 참조하십시오.
엔터프라이즈 서비스 응용 프로그램에는 수학 메서드(Add, Subtract, Multiply 및 Divide)를 노출하는 단일 ICalculator
인터페이스를 구현하는 단일 구성 요소가 포함되어 있습니다.
// Define the component's interface.
public interface ICalculator
{
double Add(double n1, double n2);
double Subtract(double n1, double n2);
double Multiply(double n1, double n2);
double Divide(double n1, double n2);
}
이 인터페이스는 요청-회신 통신 패턴을 정의하는 서비스 계약으로 노출됩니다. 클라이언트에서 수학 연산을 동기적으로 요청하면 서비스와 기본 구성 요소에서 결과를 회신합니다. 콘솔 창에는 클라이언트 동작이 표시됩니다.
서비스는 IIS(인터넷 정보 서비스)에 의해 in-process로 호스팅되며 서비스로 전송된 첫 번째 메시지에 의해 활성화됩니다. ESCalculatorService
클래스 구현에서는 해당 결과를 계산하여 반환합니다.
// Supporting implementation for the ICalculator interface.
public class ESCalculatorService : ServicedComponent, ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
참고
이 클래스에는 ServiceModel 관련 코드가 포함되지 않습니다. 이 클래스는 엔터프라이즈 서비스 특성을 갖는 일반적인 엔터프라이즈 서비스 어셈블리로, 서명되어 GAC(전역 어셈블리 캐시)에 추가됩니다.
COM+ Service Model Configuration Tool (ComSvcConfig.exe)는 선택한 인터페이스에 대한 지원 서비스를 추가하는 데 사용됩니다. 다음 구문을 사용하여 이를 수행합니다.
ComSvcConfig.exe /install /application:ServiceModelSample /contract:ServiceModelSample.ESCalculator,ICalculator hosting:was /webDirectory:ServiceModelSamples /mex /verbose
이 경우 도구는 ServiceModelSample 응용 프로그램 내에 있는 ServiceModelSample.ESCalculator 구성 요소의 ICalculator
인터페이스에 대한 서비스를 추가합니다. 이 서비스는 ServiceModelSample 가상 디렉터리 내에서 IIS에 의해 호스팅됩니다. 추가된 서비스는 서비스와 통신하는 데 사용할 단일 끝점을 노출합니다. 기본적으로 서비스와의 통신에 사용되는 끝점 주소는 구성 요소의 ProgID(즉, https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc)에서 생성되지만 .svc 서비스 파일의 이름을 변경하여 이 서비스 끝점 주소를 수정할 수 있습니다. 이 도구는 서비스의 바인딩에 대한 구성을 Web.config 파일에 추가합니다. 서비스의 바인딩에 대한 구성은 기본적으로 표준 wsHttpBinding 바인딩으로 설정됩니다. 이 바인딩은 주소 지정 및 보안에 SOAP 1.2 및 웹 서비스 표준을 사용하는 HTTP 통신을 제공합니다.
또한 이 도구는 브라우저에서 HTTP GET을 통해 https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc?wsdl의 WSDL 메타데이터에 액세스하는 기능뿐만 아니라 https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc/mex에서 MEX(메타데이터 교환) 끝점을 노출합니다. 이러한 메타데이터 기능은 /mex 도구 옵션을 생략하여 비활성화할 수 있습니다.
서비스 계약은 ICalculator
인터페이스에서 직접 파생되며 다음 ServiceContract 정의와 동일합니다.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
클라이언트는 Service Metadata Utility Tool (Svcutil.exe)에 의해 생성되는 클라이언트를 사용하여 계약에서 통신합니다. 클라이언트는 generatedClient.cs 파일에 포함됩니다. 이 유틸리티는 서비스에 대한 메타데이터를 검색하고 계약 형식에서 통신하는 데 사용되는 클라이언트를 생성합니다. 프록시 코드는 업데이트된 메타데이터를 검색하는 데 사용되므로 이 프록시 코드를 생성하려면 호스팅 서비스를 사용할 수 있어야 합니다. 클라이언트 디렉터리의 명령 프롬프트에서 다음 명령을 실행하여 형식화된 프록시를 생성합니다.
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc/mex /out:generatedClient.cs
지정된 계약에서 통신하기 위해 생성된 클라이언트를 지정하면 해당 클라이언트에서 적절한 주소와 바인딩을 구성하여 지정된 서비스 끝점에 액세스할 수 있습니다. 서비스와 마찬가지로 클라이언트는 구성 파일(App.config)을 사용하여 통신할 끝점을 지정합니다. 클라이언트 끝점 구성은 구성 이름, 서비스 끝점의 절대 주소, 바인딩 및 계약으로 구성됩니다.
<system.serviceModel>
<client>
<endpoint
address="https://localhost/ServiceModelSamples/servicemodelsample.escalculator.svc/ICalculator"
binding="wsHttpBinding"
bindingConfiguration="comNonTransactionalBinding"
contract="ICalculator" />
</client>
<bindings>
<wsHttpBinding>
<binding name="comNonTransactionalBinding" >
<reliableSession enabled="true"/>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
클라이언트 구현은 생성된 클라이언트의 인스턴스를 생성합니다. 그런 다음 이 인스턴스를 사용하여 서비스와 통신을 시작할 수 있습니다.
// Create a client.
CalculatorClient client = new CalculatorClient();
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
샘플을 실행하면 작업 요청 및 응답이 클라이언트 콘솔 창에 표시됩니다. 이를 통해 WCF 클라이언트에서 생성된 WCF 서비스가 사용되는 것을 볼 수 있습니다. 클라이언트를 종료하려면 클라이언트 창에서 Enter 키를 누릅니다.
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
샘플을 설치하고 빌드하려면
Windows Communication Foundation 샘플의 일회 설치 절차를 수행했는지 확인합니다.
C# 또는 Visual Basic .NET 버전의 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.
\InetPub\wwwroot\ServiceModelSamples 및 bin 하위 디렉터리가 비어 있는지 확인합니다.
명령 프롬프트에서 샘플의 service\bin 폴더로 이동합니다. Windows Vista 또는 Windows Server 2008을 사용할 경우 Administrator로 명령 프롬프트를 실행해야 합니다.
gacutil.exe /i ESCalculator.dll을 입력하여 전역 어셈블리 캐시에 어셈블리를 추가합니다. Gacutil.exe가 경로에 있는지 확인합니다.
regsvcs.exe ESCalculator.dll을 입력하여 어셈블리의 구성 요소 및 ServiceModelSample 응용 프로그램을 COM+에 등록합니다. Regsvcs.exe가 경로에 있는지 확인합니다.
ComSvcConfig.exe /install /application:ServiceModelSample /contract:"ServiceModelSample.ESCalculator,ICalculator" /hosting:was /webDirectory:ServiceModelSamples /mex /verbose를 입력하여 인터페이스를 IIS 호스팅 서비스로 노출합니다.
ComSvcConfig.exe가 경로에 있는지 확인합니다.
단일 컴퓨터 구성에서 샘플을 실행하려면
https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc 주소를 입력하여 브라우저에서 서비스에 액세스할 수 있는지 확인합니다. 확인 페이지가 응답으로 표시됩니다.
언어별 폴더의 \client\bin\에서 Client.exe를 실행합니다. 클라이언트 콘솔 창에 클라이언트 동작이 표시됩니다.
클라이언트와 서비스가 통신할 수 없는 경우 문제 해결 팁을 참조하십시오.
참고
샘플에서는 콘솔 응용 프로그램 클라이언트 프로그램을 빌드합니다. 출력을 보려면 명령 프롬프트를 사용하여 샘플을 실행해야 합니다.
다중 컴퓨터 구성에서 샘플을 실행하려면
서비스 컴퓨터에서 ServiceModelSamples라는 가상 디렉터리를 만듭니다. 가상 디렉터리 설치 지침과 함께 포함된 Setupvroot.bat 스크립트를 사용하여 디스크 디렉터리와 가상 디렉터리를 만들 수 있습니다.
service\bin 디렉터리의 ESCalculator.dll 파일을 서비스 컴퓨터의 디렉터리로 복사합니다.
명령 프롬프트에서 서비스 컴퓨터의 대상 디렉터리로 이동합니다. Windows Vista 또는 Windows Server 2008을 사용할 경우 Administrator로 명령 프롬프트를 실행해야 합니다.
서비스 컴퓨터에서 gacutil.exe /i ESCalculator.dll을 입력하여 전역 어셈블리 캐시에 어셈블리를 추가합니다.
서비스 컴퓨터에서 regsvcs.exe ESCalculator.dll을 입력하여 어셈블리의 구성 요소 및 ServiceModelSample 응용 프로그램을 COM+에 등록합니다.
서비스 컴퓨터에서 ComSvcConfig.exe /install /application:ServiceModelSample /contract:"ServiceModelSample.ESCalculator,ICalculator" /hosting:was /webDirectory:ServiceModelSamples /mex /verbose를 입력하여 계약을 IIS 호스팅 서비스로 노출합니다.
언어별 폴더의 \client\bin\ 폴더에서 클라이언트 컴퓨터로 클라이언트 프로그램 파일을 복사합니다.
클라이언트 구성 파일에서 끝점 정의의 주소 값을 서비스의 새 주소와 일치하도록 변경합니다. 주소에서 "localhost"에 대한 참조를 정규화된 도메인 이름으로 바꿉니다.
클라이언트 컴퓨터에서 브라우저를 사용하여 서비스에 액세스할 수 있는지 확인합니다.
클라이언트 컴퓨터의 명령 프롬프트에서 Client.exe를 실행합니다.
샘플 실행 후 정리를 수행하려면
Windows Vista 또는 Windows Server 2008을 사용할 경우 Administrator로 명령 프롬프트를 실행해야 합니다. ComSvcConfig.exe /u /application:ServiceModelSample /contract:ServiceModelSample.ESCalculator,ICalculator를 입력하여 COM+ 통합을 제거합니다.
regsvcs.exe /u ESCalculator.dll을 입력하여 COM+에서 응용 프로그램을 제거합니다.
gacutil.exe /u ESCalculator를 입력하여 전역 어셈블리 캐시에서 구성 요소를 제거합니다.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.