Interoperating with ASMX Web Services
이 샘플에서는 WCF(Windows Communication Foundation) 클라이언트 응용 프로그램을 기존 ASMX 웹 서비스와 통합하는 방법을 보여 줍니다.
참고
이 샘플의 설치 절차 및 빌드 지침은 이 항목의 끝부분에 나와 있습니다.
이 샘플은 IIS(인터넷 정보 서비스)에서 호스팅되는 클라이언트 콘솔 프로그램(.exe) 및 서비스 라이브러리(.dll)로 구성됩니다. 서비스는 요청-회신 통신 패턴을 정의하는 계약을 구현하는 ASMX 웹 서비스입니다. 서비스는 수학 연산(Add
, Subtract
, Multiply
및 Divide
)을 노출합니다. 클라이언트가 수학 연산을 동기적으로 요청하면 서비스가 결과로 회신합니다. 콘솔 창에는 클라이언트 동작이 표시됩니다.
다음 샘플 코드에 나와 있는 ASMX 웹 서비스 구현은 적절한 결과를 계산하여 반환합니다.
[WebService(Namespace="http://Microsoft.ServiceModel.Samples")]
public class CalculatorService : System.Web.Services.WebService
{
[WebMethod]
public double Add(double n1, double n2)
{
return n1 + n2;
}
[WebMethod]
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
[WebMethod]
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
[WebMethod]
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
구성된 대로 동일한 컴퓨터의 클라이언트는 https://localhost/servicemodelsamples/service.asmx에서 서비스에 액세스할 수 있습니다. 원격 시스템의 클라이언트가 서비스에 액세스하려면 localhost 대신 정규화된 도메인 이름을 지정해야 합니다.
통신은 Service Metadata Utility Tool (Svcutil.exe)에 의해 생성된 클라이언트를 통해 수행됩니다. 클라이언트는 generatedClient.cs 파일에 포함됩니다. 업데이트된 메타데이터를 검색하는 데 프록시 코드가 사용되므로 프록시 코드를 생성하기 위해 ASMX 서비스를 사용할 수 있어야 합니다. 클라이언트 디렉터리의 명령 프롬프트에서 다음 명령을 실행하여 형식화된 프록시를 생성합니다.
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost/servicemodelsamples/service.svc?wsdl /out:generatedClient.cs
생성된 클라이언트를 사용하면 해당 주소와 바인딩을 구성하여 서비스 끝점에 액세스할 수 있습니다. 서비스와 마찬가지로 클라이언트는 구성 파일(App.config)을 사용하여 통신할 끝점을 지정합니다. 다음 샘플 구성에서와 같이 클라이언트 끝점 구성은 서비스 끝점의 절대 주소, 바인딩 및 계약으로 구성됩니다.
<client>
<endpoint
address="https://localhost/ServiceModelSamples/service.asmx"
binding="basicHttpBinding"
contract="Microsoft.ServiceModel.Samples.CalculatorServiceSoap" />
</client>
클라이언트 구현은 생성된 클라이언트의 인스턴스를 생성합니다. 그런 다음 생성된 클라이언트를 사용하여 서비스와 통신할 수 있습니다.
// Create a client.
CalculatorServiceSoapClient client = new CalculatorServiceSoapClient();
// 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();
Console.WriteLine();
Console.WriteLine("Press <ENTER> to terminate client.");
Console.ReadLine();
샘플을 실행하면 작업 요청 및 응답이 클라이언트 콘솔 창에 표시됩니다. 클라이언트를 종료하려면 클라이언트 창에서 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 샘플 빌드의 지침을 따릅니다.
단일 컴퓨터 또는 다중 컴퓨터 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.