방법: ASP.NET 2.0을 사용하여 이벤트 구동 비동기 웹 서비스 클라이언트 구현
이 항목은 레거시 기술과 관련된 것입니다. 이제 XML Web services와 XML Web services 클라이언트는 다음을 사용하여 만들어야 합니다. Windows Communication Foundation.
.NET Framework의 버전 2.0에서 웹 서비스 기술 언어 도구(Wsdl.exe)에 의해 생성된 프록시 코드는 새로운 이벤트 구동 비동기 프로그래밍 모델을 지원합니다. 이벤트 구동 비동기 프로그래밍 모델과 ASP.NET 2.0 웹 클라이언트의 자동 프록시 생성을 결합하여 고성능의 웹 서비스 기반 웹 응용 프로그램을 신속하게 빌드할 수 있습니다.
이벤트 기반 비동기 패턴을 사용한 다중 스레드 프로그래밍에서는 복잡한 다중 스레드 코드를 직접 구현할 필요 없이 다중 스레드 응용 프로그램을 쉽게 빌드할 수 있도록 이벤트를 통해 콜백을 처리하는 새로운 비동기 프로그래밍 모델을 소개합니다. 새로운 이벤트 구동 비동기 모델에 대한 개요는 이벤트 기반 비동기 패턴 개요를 참조하십시오. 새 모델을 사용하는 클라이언트 구현에 대한 자세한 내용은 방법: 이벤트 기반 비동기 패턴의 클라이언트 구현을 참조하십시오.
.NET Framework 2.0 버전에서 ASP.NET 응용 프로그램을 사용하여 빌드된 웹 서비스 클라이언트는 새로운 App_WebReferences 하위 디렉터리를 사용할 수 있습니다. 이 하위 디렉터리에서는 클라이언트 ASP.NET 응용 프로그램이 WSDL 계약을 지원하는 XML Web services를 호출할 때 WSDL 파일을 프록시 코드로 동적으로 컴파일할 수 있습니다.
전체 샘플을 보려면 RADAsync 퀵 스타트(ASP.NET 데이터 서비스 퀵 스타트)를 참조하십시오.
이벤트 구동 웹 서비스 클라이언트 구현
비동기적으로 가장 잘 수행되며 시간이 많이 걸리는 동작을 수행하는 동기 웹 메서드를 사용하여 XML Web services를 만듭니다.
[WebMethod] public string HelloWorld() { Thread.Sleep(5000); return "Hello World"; }
<WebMethod()> _ Public Function HelloWorld() As String Thread.Sleep(5000) ..Return "Hello World" End Function
클라이언트 ASP.NET 응용 프로그램에서 Async 특성을 @ Page 지시문에 추가한 후 true로 설정하고 @ Import 지시문을 사용하여
System.Threading
네임스페이스를 가져옵니다.<%@ Page Language="C#" Debug="true" Async="true" %> <%@ Import Namespace="System.Threading" %>
<%@ Page Language="VB" Debug="true" Async="true" %> <%@ Import Namespace="System.Threading" %>
자동 프록시 생성을 사용하려면 웹 서비스 기술 언어 도구(Wsdl.exe)를 사용하여 WSDL 파일을 생성한 다음 클라이언트 App_WebReferences 하위 디렉터리에 저장합니다. 자세한 내용은 ASP.NET 웹 사이트 레이아웃을 참조하십시오.
일반적으로 서비스 클래스 이름과
WaitService
문자열을 함께 사용하여 새 개체를 만드는 방식으로 웹 서비스 클라이언트 응용 프로그램을 만들고, 웹 서비스 URL을 Url 속성에 할당합니다. 예를 들어, 서비스 클래스 이름이HelloWorld
인 경우 클라이언트는HelloWorldWaitService
개체를 만듭니다.HelloWorldWaitService service = new HelloWorldWaitService(); service.Url = "https://localhost/QuickStartv20/webservices/Samples/RADAsync/cs/Server/HelloWorldWaitService.asmx";
Dim service As New HelloWorldWaitService() service.Url = "https://localhost/QuickStartv20/webservices/Samples/RADAsync/vb/Server/HelloWorldWaitService.asmx"
클라이언트 응용 프로그램 코드에서 프록시의 Completed 이벤트에 이벤트 처리기를 할당합니다. 다음 코드 예제에서 클라이언트 ASP.NET 페이지에는 웹 서비스 메서드가 반환될 때 호출되는
HelloWorldCompleted
메서드가 있습니다.//Add our callback function to the event handler. service.HelloWorldCompleted += this.HelloWorldCompleted;
'Add our callback function to the event handler AddHandler service.HelloWorldCompleted, AddressOf Me.HelloWorldCompleted
클라이언트 응용 프로그램 코드에서 프록시에 Async 메서드를 호출합니다. 이 메서드는 웹 서비스와 같은 이름에 "Async"가 뒤에 추가됩니다. 자세한 내용은 방법: 이벤트 기반 비동기 패턴의 클라이언트 구현을 참조하십시오. 이 메서드 호출은 클라이언트 ASP.NET 페이지에서 비동기 호출처럼 보이지만 즉시 반환됩니다. 클라이언트 ASP.NET 페이지는 비동기 호출이 완료되고, 프록시의 Completed 이벤트가 발생되어 처리기 메서드가 실행되어야만 브라우저에 반환됩니다.
service.HelloWorldAsync("second call");
service.HelloWorldAsync("second call")