Demonstra Passo a passo: Chamada Serviços Web XML a partir do Windows Forms

Serviços da Web XML é um recurso do Visual Studio que permite que você a desenvolva aplicativos que trocam mensagens em um ambiente pouco acoplado usando protocolos padrão, como http, XML, XSD, SOAP e WSDL.As mensagens podem ser estruturadas e digitadas ou vagamente definidas.Como os Serviços da Web são baseados em protocolos padrão, seus aplicativos de Serviços da Web podem se comunicar com uma ampla variedade de implementações, plataformas e dispositivos.Para obter mais informações, consulte Serviços da Web no código gerenciado.

Você pode usar os serviços da Web para aprimorar a funcionalidade dos Formulários do Windows.Conectando Formulários do Windows a serviços da Web é tão simples quanto fazer chamadas a métodos de serviços da Web, que são processados em um servidor que, em seguida, retorna os resultados da chamada de método.

Há dois tipos de métodos de serviço Web: síncrono e assíncrono.Quando métodos síncronos de serviços da Web são chamados, quem chamou espera o serviço Web responder antes de continuar as operações.Quando são chamados métodos assíncronos de serviços da Web, você pode continuar a usar o thread que chamou enquanto espera o serviço Web responder.Isso permite que você use o conjunto existente de threads com eficiência no aplicativo cliente.Para obter mais informações sobre como trabalhar com métodos de serviços da Web síncronos e assíncronos, consulte Acessando Web Services em código gerenciado.

Métodos síncronos de serviço da Web

Uma chamada para um método de serviço Web síncrono envolve chamar o método e aguardar que a computação ocorra no servidor e um valor seja retornado antes de continuar com o restante do código no Formulário do Windows

Para criar um Serviço da Web XML

  1. Crie um aplicativo de serviço da Web.Para obter mais informações, consulte Criando serviços da Web em código gerenciado.

  2. No Gerenciador de Soluções, clique com o botão direito do mouse no arquivo. asmx e escolha Visualizar Código.

  3. Crie um método de serviço da Web que faz adição.O código exemplo a seguir mostra um método de serviço da Web que pega dois inteiros e os soma, retornando o resultado.

    <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. Crie outro método de serviço da Web que faz multiplicação.O código exemplo a seguir mostra um método de serviço da Web que pega dois inteiros e os multiplica, retornando o resultado.

    <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. No menu Build, escolha Build Solution.Você também pode procurar o arquivo .asmx criado no projeto para obter mais informações sobre serviços da Web.Seu serviço da Web agora está disponível para ser chamado de um Formulário do Windows.

Para chamar um serviço da Web XML de forma assíncrona

  1. Criar um novo aplicativo baseado em Windows.Para obter mais informações, consulte Como: Criar um projeto de aplicativos do Windows.

    Observação de segurança:

    Chamadas para métodos da Web exigem um nível de privilégio concedido pela WebPermission classe. Se você estiver executando em um contexto de confiança parcial, o processo pode acionar uma exceção.Para obter mais informações, consulte Noções Básicas sobre Segurança de Accesso a Código.

  2. No Gerenciador de Soluções, clique com botão direito do mouse no nó Referências do projeto e em seguida, clique em Adicionar Referência da Web.

    A caixa de diálogo Adicionar Referência da Web é aberta.

  3. Digite o seguinte URI de serviço da Web na caixa Endereço e pressione ENTER:

    https://localhost/WebService1/Service1.asmx
    

    Essa é a URI do serviço da Web que você criou no procedimento anterior.Os métodos da Web WebAdd e WebMultiply aparecem no painel esquerdo da caixa de diálogo Adicionar Referência da Web.

  4. Clique em Add Reference.

  5. Da Caixa de Ferramentas, adicionar três controles TextBox e dois controles Button.As caixas de texto servirão para os números, e os botões serão usados para os cálculos e para chamar os métodos de serviço da Web.

  6. Defina as propriedades dos controles da seguinte forma:

    Controle

    Propriedade

    Texto

    TextBox1

    Texto

    0

    TextBox2

    Texto

    0

    TextBox3

    Texto

    0

    Button1

    Texto

    Adicionar

    Button2

    Texto

    Multiplicar

  7. Clique com o botão direito do mouse na classe e escolha View Code.

  8. Criar uma instância do serviço da Web como um membro da classe.Você precisará saber o nome do servidor onde você criou o serviço Web anteriormente.

    ' 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. Crie um manipulador de eventos para o evento Click de Button1.Para obter detalhes, consulte:Como: Criar manipuladores de eventos usando o Designer.

    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#) Coloque o seguinte código no construtor do formulário para registrar o manipulador de eventos.

    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. Criar um manipulador de eventos para o evento Click de Button2 da mesma maneira e adicione o código a seguir.

    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#) Coloque o seguinte código no construtor do formulário para registrar o manipulador de eventos.

    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. Pressione F5 para executar o aplicativo.

  12. Insira valores nas primeira duas caixas de texto.Quando você pressiona o botão Somar, a terceira caixa de texto deve mostrar sua soma.Quando você pressiona o botão Multiplicar, a terceira caixa de texto deve mostrar seu produto.

    Observação:

    A primeira chamada para um serviço da Web leva algum tempo para o servidor processar, porque o serviço Web é instanciado no servidor.Tenha isso em mente quando você pressiona os botões em seu aplicativo.Este tempo de latência é tratado na seção a seguir.

Próximas etapas

Quando você chamar métodos assíncronos de serviço da Web, o aplicativo continuará a ser executado enquanto aguarda o serviço Web responder.Isto permite que você use os recursos de forma eficiente no aplicativo cliente.

Para obter mais informações, consulte Como: Acessar um serviço da Web de forma assíncrona em código gerenciado.

Consulte também

Tarefas

Como: Vincular a um serviço da Web usando o BindingSource de formulários do Windows

Conceitos

Escolher entre formulários do Windows e formulários da Web

Referências da Web no Visual Studio

Como: Gerar um proxy de serviço da Web

Outros recursos

Acessando Web Services em código gerenciado

Serviços da Web no código gerenciado