Condividi tramite


Procedura: implementare un client del servizio Web asincrono basato sugli eventi tramite ASP.NET 2.0

Questo argomento è specifico di una tecnologia legacy. Servizi Web XML e client di servizi Web XML devono essere creati attualmente tramite Windows Communication Foundation.

Nella versione 2.0 di .NET Framework il codice proxy generato da Strumento del linguaggio di descrizione dei servizi Web (Wsdl.exe) non supporta la nuova funzionalità event-driven asynchronous programming model. Combinando il modello di programmazione asincrono basato sugli eventi e la generazione proxy automatica di client Web di ASP.NET 2.0, è possibile compilare in modo rapido applicazioni Web basate sul servizio Web.

Multithreaded Programming with the Event-based Asynchronous Pattern introduce un nuovo modello di programmazione asincrona che utilizza gli eventi per gestire i callback, rendendo più semplice la compilazione di applicazioni multithreading senza dovere implementare codice multithreading complesso. Per una panoramica del nuovo modello asincrono basato sugli eventi, vedere Event-based Asynchronous Pattern Overview. Per i dettagli sulle implementazioni di client che utilizzano il nuovo modello, vedere How to: Implement a Client of the Event-based Asynchronous Pattern.

Client di servizio Web compilati utilizzando l'applicazione ASP.NET inclusa nella versione 2.0 di .NET Framework possono sfruttare la nuova sottodirectory App_WebReferences che può compilare dinamicamente un file WSDL in codice proxy quando l'applicazione ASP.NET client chiama un servizio Web XML che supporta il contratto WSDL.

Per l'esempio completo, vedere la guida rapida di RADAsync disponibile all'indirizzo ASP.NET Web Services QuickStarts.

Implementazione di un client di servizio Web basato sugli eventi

  1. Crea un servizio Web XML con un metodo Web sincrono che esegue alcune attività di lunga durata che è meglio effettuare in modo asincrono.

    [WebMethod]
    public string HelloWorld() {
      Thread.Sleep(5000);
      return "Hello World";
    }
    
    <WebMethod()> _
    Public Function HelloWorld() As String 
      Thread.Sleep(5000)
    ..Return "Hello World"
    End Function
    
  2. Nell'applicazione client ASP.NET, aggiungere l'attributo Async alla direttiva @ Page lo impostarla su truee utilizzare la direttiva @ Import per importare lo spazio dei nomi System.Threading.

    <%@ Page Language="C#" Debug="true" Async="true" %>
    <%@ Import Namespace="System.Threading" %>
    
    <%@ Page Language="VB" Debug="true" Async="true" %>
    <%@ Import Namespace="System.Threading" %>
    
  3. Per utilizzare la generazione proxy automatica, generare un file WSDL ( utilizzando Strumento del linguaggio di descrizione dei servizi Web (Wsdl.exe)) e inserire il file nella sottodirectory App_WebReferences client. Per ulteriori informazioni, vedere ASP.NET Web Site Layout.

  4. Compilare l'applicazione client del servizio Web normalmente creando un nuovo oggetto utilizzando il nome della classe del servizio più la stringa WaitService e assegnare l'URL del servizio Web alla proprietà Url. Ad esempio, se il nome della classe del servizio è HelloWorld, il client crea un oggetto 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"
    
  5. Nel codice dell'applicazione client, assegnare un gestore eventi all'evento Completed del proxy. Nell'esempio di codice seguente, la pagina ASP.NET client presenta un metodo HelloWorldCompleted chiamato quando il metodo del servizio Web restituisce un valore.

    //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
    
  6. Nel codice dell'applicazione client, chiamare il metodo Async sul proxy. (Questo metodo ha lo stesso nome del metodo Web ma con l'aggiunta di "Async". Per informazioni dettagliate, vedere How to: Implement a Client of the Event-based Asynchronous Pattern. Questa chiamata al metodo viene visualizzata come una chiamata sincrona nella pagina del client ASP.NET, ma restituisce immediatamente un valore. La pagina del client ASP.NET non viene restituita al browser fino a che non viene completata la chiamata asincrona, viene generato l'evento Completed del proxy e viene eseguito il metodo del gestore.

    service.HelloWorldAsync("second call");
    
    service.HelloWorldAsync("second call")
    

Vedere anche

Altre risorse

ASP.NET Web Services QuickStarts