Пошаговое руководство. Вызов веб-служб XML из форм Windows Forms

Обновлен: Ноябрь 2007

Веб-службы XML — это компонент Visual Studio, обеспечивающий возможность обмена сообщениями в слабосвязанной среде при помощи стандартных протоколов, таких как HTTP, XML, XSD, SOAP и WSDL. Сообщения могут быть структурированы и типизированы или свободно определены. Поскольку веб-службы основаны на стандартных протоколах, приложения веб-служб могут взаимодействовать со множеством реализаций, платформ и устройств. Дополнительные сведения см. в разделе Веб-службы в управляемом коде.

Веб-службы могут использоваться для расширения функциональных возможностей форм Windows Forms. Подключение форм Windows Forms к веб-службами так же просто, как и вызов методов веб-служб, обрабатываемых на сервере, который затем возвращает результаты вызова метода.

Существуют два типа методов веб-служб: синхронные и асинхронные. При вызове синхронных методов веб-служб вызывающий объект ожидает ответа веб-службы до возобновления работы. При вызове асинхронных методов веб-служб можно продолжать использование вызывающего потока во время ожидания ответа веб-службы. Это позволяет эффективно использовать существующий набор потоков в клиентском приложении. Дополнительные сведения о работе с синхронными и асинхронными методами веб-служб см. в разделе Доступ к веб-службам в управляемом коде.

Синхронные методы веб-служб

Вызов синхронного метода веб-служб включает вызов метода и ожидание вычислений на сервере, а также возврата значения до возобновления выполнения остальной части кода в Windows Forms.

Чтобы создать веб-службу XML, выполните следующие действия.

  1. Создайте приложение веб-службы. Дополнительные сведения см. в разделе Создание веб-служб в управляемом коде.

  2. В Обозревателе решений щелкните правой кнопкой мыши ASMX-файл и выберите команду Просмотреть код.

  3. Создайте метод веб-служб, выполняющий сложение. В следующем примере кода показан метод веб-службы, который складывает два целых числа и возвращает их сумму.

    <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. Создайте другой метод веб-служб, выполняющий умножение. В следующем примере кода показан метод веб-службы, который умножает два целых числа и возвращает их произведение.

    <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. В меню Построение выберите пункт Построить решение. Дополнительные сведения о веб-службах можно найти в созданном ASMX-файле данного проекта. Теперь веб-служба доступна для вызова из формы Windows Forms.

Чтобы синхронно вызвать веб-службу XML, выполните следующие действия.

  1. Создайте новое приложение Windows. Дополнительные сведения см. в разделе Практическое руководство. Создание проекта приложения Windows.

    scf355x6.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

    Для вызова веб-методов требуется уровень прав доступа, предоставляемый классом WebPermission. При работе на обычном уровне безопасности в процессе может возникнуть исключение. Дополнительные сведения см. в разделе Основы управления доступом для кода.

  2. В обозревателе решений щелкните правой кнопкой мыши узел проекта Ссылки и выберите Добавить веб-ссылку.

    Появится диалоговое окно Добавление веб-ссылки.

  3. В поле Адрес введите следующий URI веб-службы и нажмите клавишу ВВОД.

    https://localhost/WebService1/Service1.asmx
    

    Это URI веб-службы, созданной ранее. Веб-методы WebAdd и WebMultiply отображаются в левой части окна Добавление веб-ссылки.

  4. Нажмите кнопку Добавить ссылку.

  5. Из панели элементов перетащите в форму три элемента управления TextBox и два элемента управления Button. Текстовые поля предназначены для чисел, а кнопки будут использоваться для вычислений и вызова методов веб-служб.

  6. Установите свойства элементов управления следующим образом.

    Элемент управления

    Свойство

    Текст

    TextBox1

    Text

    0

    TextBox2

    Text

    0

    TextBox3

    Text

    0

    Button1

    Text

    Добавить

    Button2

    Text

    Произведение

  7. Щелкните форму правой кнопкой мыши и выберите команду Просмотреть код.

  8. Создайте экземпляр веб-службы как член класса. Необходимо знать имя сервера, на котором ранее создавалась веб-служба.

    ' 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. Создайте обработчик событий для события Click кнопки Button1. Дополнительные сведения см. в разделе Руководство: создание обработчика событий с помощью конструктора.

    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#) Добавьте в конструктор формы следующий код, чтобы зарегистрировать обработчик событий.

    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. Создайте обработчик событий для события Click для Button2 таким же способом и добавьте следующий код.

    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#) Добавьте в конструктор формы следующий код, чтобы зарегистрировать обработчик событий.

    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. Нажмите клавишу F5 для запуска приложения.

  12. Введите значения в первые два текстовых поля. При нажатии кнопки Сумма в третьем текстовом поле должна отобразиться их сумма. При нажатии кнопки Произведение в третьем текстовом поле должно отобразиться произведение.

    scf355x6.alert_note(ru-ru,VS.90).gifПримечание.

    Первый вызов веб-службы требует от сервера времени на обработку, так как экземпляр веб-службы создается на этом сервере. Помните об этом, нажимая кнопки в приложении. Это отставание описывается в следующем разделе.

Следующие действия

При вызове асинхронных методов веб-служб приложение продолжает работать во время ожидания ответа веб-службы. Это позволяет эффективно использовать ресурсы клиентского приложения.

Дополнительные сведения см. в разделе Практическое руководство. Асинхронный доступ к веб-службе в управляемом коде.

См. также

Задачи

Практическое руководство. Связывание с веб-службой с помощью компонента BindingSource в Windows Forms

Основные понятия

Выбор между формами Windows Forms и веб-формами

Веб-ссылки в Visual Studio

Практическое руководство. Создание прокси для веб-службы

Другие ресурсы

Доступ к веб-службам в управляемом коде

Веб-службы в управляемом коде