Condividi tramite


Procedura dettagliata: chiamata di servizi Web XML da Windows Form

Aggiornamento: novembre 2007

I servizi Web XML sono una funzionalità di Visual Studio che consente lo scambio di messaggi in un ambiente con accoppiamento ridotto mediante protocolli standard quali HTTP, XML, XSD, SOAP e WSDL. I messaggi possono essere strutturati e tipizzati oppure definiti senza vincoli. Poiché i servizi Web sono basati su protocolli standard, le applicazioni di servizio Web possono comunicare con una vasta gamma di implementazioni, piattaforme e periferiche. Per ulteriori informazioni, vedere Servizi Web in codice gestito.

I servizi Web possono essere utilizzati per ottimizzare le funzionalità di Windows Form. Per connettere Windows Form ai servizi Web è sufficiente chiamare metodi di servizio Web, che vengono elaborati in un server che quindi restituisce i risultati della chiamata di metodo.

Sono disponibili due tipi di metodi di servizio Web: sincroni e asincroni. Quando vengono chiamati metodi di servizio Web sincroni, il chiamante attende la risposta del servizio Web prima di continuare le operazioni. Quando vengono chiamati metodi di servizio Web asincroni, è possibile continuare a utilizzare il thread chiamante mentre si attende la risposta del servizio Web. L'insieme di thread esistente può così essere utilizzato in modo efficiente nell'applicazione client. Per ulteriori informazioni sull'utilizzo dei metodi di servizio Web sincroni e asincroni, vedere Accesso a servizi Web in codice gestito.

Metodi di servizio Web sincroni

La chiamata a un metodo di servizio Web sincrono determina la chiamata del metodo e l'attesa del completamento dell'elaborazione sul server e della restituzione di un valore prima di proseguire con il resto del codice nel Windows Form.

Per creare un servizio Web XML

  1. Creare un'applicazione di servizio Web. Per ulteriori informazioni, vedere Creazione di servizi Web in codice gestito.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul file asmx, quindi scegliere Visualizza codice.

  3. Creare un metodo di servizio Web che esegue un'addizione. L'esempio di codice seguente mostra un metodo di servizio Web che esegue l'addizione di due valori integer e ne restituisce la somma.

    <WebMethod()> Public Function WebAdd(ByVal x As Integer, ByVal y As Integer) As Integer
       Return x + y
    End Function
    
    [WebMethod]
    public int WebAdd(int x, int y)
    {
       return x + y;
    }
    
    /** @attribute WebMethod() */
    public int WebAdd(int x, int y)
    {
       return x + y;
    }
    
  4. Creare un altro metodo di servizio Web che esegue moltiplicazioni. L'esempio di codice seguente mostra un metodo di servizio Web che esegue la moltiplicazione di due valori integer e ne restituisce il prodotto.

    <WebMethod()> Public Function WebMultiply(ByVal x As Integer, ByVal y As Integer) As Integer
       Return x * y
    End Function
    
    [WebMethod]
    public int WebMultiply(int x, int y) 
    {
       return x * y;
    }
    
    /** @attribute WebMethod() */
    public int WebMultiply(int x, int y) 
    {
       return x * y;
    }
    
  5. Scegliere Genera soluzione dal menu Genera. Per ulteriori informazioni sui servizi Web è inoltre possibile individuare il file ASMX creato nel progetto. Il servizio Web può ora essere chiamato da Windows Form.

Per chiamare un servizio Web XML in modo sincrono

  1. Creare una nuova applicazione per Windows. Per ulteriori informazioni, vedere Procedura: creare un progetto applicazione Windows.

    Nota sulla sicurezza:

    Le chiamate ai metodi Web richiedono un livello di privilegi concesso dalla classe WebPermission. Se l'esecuzione avviene in un contesto di attendibilità parziale, è possibile che venga generata un'eccezione. Per ulteriori informazioni, vedere Nozioni fondamentali sulla protezione dall’accesso di codice.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo Riferimenti del progetto, quindi fare clic su Aggiungi riferimento Web.

    Verrà visualizzata la finestra di dialogo Aggiungi riferimento Web

  3. Digitare il seguente URI di servizio Web nella casella Indirizzo, quindi premere INVIO:

    https://localhost/WebService1/Service1.asmx
    

    Si tratta dell'URI del servizio Web creato nella procedura precedente. I metodi Web WebAdd e WebMultiply verranno visualizzati nel riquadro sinistro della finestra di dialogo Aggiungi riferimento Web.

  4. Scegliere Aggiungi riferimento.

  5. Dalla Casella degli strumenti aggiungere tre controlli TextBox e due controlli Button. Le caselle di testo verranno utilizzate per i numeri, mentre i pulsanti verranno utilizzati per i calcoli e per la chiamata di metodi del servizio Web.

  6. Impostare le proprietà dei controlli come illustrato di seguito:

    Controllo

    Proprietà

    Testo

    TextBox1

    Text

    0

    TextBox2

    Text

    0

    TextBox3

    Text

    0

    Button1

    Text

    Somma

    Button2

    Text

    Moltiplica

  7. Fare clic con il pulsante destro del mouse sul form, quindi scegliere Visualizza codice.

  8. Creare un'istanza del servizio Web come membro della classe. È necessario conoscere il nome del server su cui è stato creato il servizio Web illustrato in precedenza.

    ' Replace localhost below with the name of the server where
    ' you created the Web service.
    Dim MathServiceClass As New localhost.Service1()
    
    localhost.Service1 MathServiceClass = new localhost.Service1();
    
    localhost.Service1 MathServiceClass = new localhost.Service1();
    
  9. Creare un gestore eventi per l'evento Click di Button1. Per informazioni dettagliate, vedere Procedura: creare le impostazioni delle applicazioni utilizzando la finestra di progettazione.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' Create instances of the operands and result.
       Dim x, y, z As Integer
    ' Parse the contents of the text boxes into integers.
       x = Integer.Parse(TextBox1.Text)
       y = Integer.Parse(TextBox2.Text)
    ' Call the WebAdd Web service method from the instance of the Web service.
       z = MathServiceClass.WebAdd(x, y)
       TextBox3.Text = z.ToString
    End Sub
    
    private void button1_Click(object sender, System.EventArgs e)
    {
    // Create instances of the operands and result.
       int x, y, z;
    // Parse the contents of the text boxes into integers.
       x = int.Parse(textBox1.Text);
       y = int.Parse(textBox2.Text);
    // Call the WebAdd Web service method from the instance of the Web service.
       z = MathServiceClass.WebAdd(x, y);
       textBox3.Text = z.ToString();
    }
    

    (Visual C#) Inserire il codice che segue nel costruttore del form per registrare il gestore eventi.

    this.button1.Click += new System.EventHandler(this.button1_Click);
    
    private void button1_Click (Object sender, System.EventArgs e)
    {
       // Create instances of the operands and result.
       int x, y, z;
       // Parse the contents of the text boxes into integers.
       x = Integer.parseInt(textBox1.get_Text());
       y = Integer.parseInt(textBox2.get_Text());
       // Call the WebAdd Web service method from the instance of the Web service.
       z = MathServiceClass.WebAdd(x, y);
       textBox3.set_Text(""+z);
    }
    
  10. Creare un gestore eventi per l'evento Click di Button2 nello stesso modo e aggiungere il codice riportato di seguito.

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    ' Create instances of the operands and result.
       Dim x, y, z As Integer
    ' Parse the contents of the text boxes into integers.
       x = Integer.Parse(TextBox1.Text)
       y = Integer.Parse(TextBox2.Text)
    ' Call the WebMultiply Web service method from the instance of the Web service.
       z = MathServiceClass.WebMultiply(x, y)
       TextBox3.Text = z.ToString
    End Sub
    
    private void button2_Click(object sender, System.EventArgs e)
    {
    // Create instances of the operands and result.
       int x, y, z;
    // Parse the contents of the text boxes into integers.
       x = int.Parse(textBox1.Text);
       y = int.Parse(textBox2.Text);
    // Call the WebAdd Web service method from the instance of the Web service.
       z = MathServiceClass.WebMultiply(x, y);
       textBox3.Text = z.ToString();
    }
    

    (Visual C#) Inserire il codice che segue nel costruttore del form per registrare il gestore eventi.

    this.button2.Click += new System.EventHandler(this.button2_Click);
    
    private void button2_Click (Object sender, System.EventArgs e)
    {
       // Create instances of the operands and result.
       int x, y, z;
       // Parse the contents of the text boxes into integers.
       x = Integer.parseInt(textBox1.get_Text());
       y = Integer.parseInt(textBox2.get_Text());
       // Call the WebAdd Web service method from the instance of the Web service.
       z = MathServiceClass.WebMultiply(x, y);
       textBox3.set_Text(""+z);
    }
    
  11. Premere F5 per eseguire l'applicazione.

  12. Immettere dei valori nelle prime due caselle di testo. Quando si sceglie il pulsante Somma nella terza casella di testo viene visualizzata la somma. Quando si fa clic sul pulsante Moltiplica, nella terza casella di testo viene visualizzato il prodotto.

    Nota:

    L'elaborazione della prima chiamata a un servizio Web da parte del server richiede un certo tempo, poiché viene creata un'istanza del servizio Web sul server. È necessario tenere presente questo aspetto quando si fa clic sui pulsanti dell'applicazione. Il lasso di tempo viene discusso nella sezione riportata di seguito.

Passaggi successivi

Quando vengono chiamati metodi di servizio Web asincroni, l'esecuzione dell'applicazione prosegue mentre si attende la risposta del servizio Web. Le risorse possono così essere utilizzate in modo efficiente nell'applicazione client.

Per ulteriori informazioni, vedere Procedura: accedere a un servizio Web in modo asincrono in codice gestito.

Vedere anche

Attività

Procedura: eseguire l'associazione a un servizio Web utilizzando il BindingSource Windows Form

Concetti

Scelta tra Windows Form e Web Form

Riferimenti Web in Visual Studio

Procedura: generare un proxy di servizio Web

Altre risorse

Accesso a servizi Web in codice gestito

Servizi Web in codice gestito