Пошаговое руководство. Вызов веб-служб XML из форм Windows Forms
Обновлен: Ноябрь 2007
Веб-службы XML — это компонент Visual Studio, обеспечивающий возможность обмена сообщениями в слабосвязанной среде при помощи стандартных протоколов, таких как HTTP, XML, XSD, SOAP и WSDL. Сообщения могут быть структурированы и типизированы или свободно определены. Поскольку веб-службы основаны на стандартных протоколах, приложения веб-служб могут взаимодействовать со множеством реализаций, платформ и устройств. Дополнительные сведения см. в разделе Веб-службы в управляемом коде.
Веб-службы могут использоваться для расширения функциональных возможностей форм Windows Forms. Подключение форм Windows Forms к веб-службами так же просто, как и вызов методов веб-служб, обрабатываемых на сервере, который затем возвращает результаты вызова метода.
Существуют два типа методов веб-служб: синхронные и асинхронные. При вызове синхронных методов веб-служб вызывающий объект ожидает ответа веб-службы до возобновления работы. При вызове асинхронных методов веб-служб можно продолжать использование вызывающего потока во время ожидания ответа веб-службы. Это позволяет эффективно использовать существующий набор потоков в клиентском приложении. Дополнительные сведения о работе с синхронными и асинхронными методами веб-служб см. в разделе Доступ к веб-службам в управляемом коде.
Синхронные методы веб-служб
Вызов синхронного метода веб-служб включает вызов метода и ожидание вычислений на сервере, а также возврата значения до возобновления выполнения остальной части кода в Windows Forms.
Чтобы создать веб-службу XML, выполните следующие действия.
Создайте приложение веб-службы. Дополнительные сведения см. в разделе Создание веб-служб в управляемом коде.
В Обозревателе решений щелкните правой кнопкой мыши ASMX-файл и выберите команду Просмотреть код.
Создайте метод веб-служб, выполняющий сложение. В следующем примере кода показан метод веб-службы, который складывает два целых числа и возвращает их сумму.
<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; }
Создайте другой метод веб-служб, выполняющий умножение. В следующем примере кода показан метод веб-службы, который умножает два целых числа и возвращает их произведение.
<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; }
В меню Построение выберите пункт Построить решение. Дополнительные сведения о веб-службах можно найти в созданном ASMX-файле данного проекта. Теперь веб-служба доступна для вызова из формы Windows Forms.
Чтобы синхронно вызвать веб-службу XML, выполните следующие действия.
Создайте новое приложение Windows. Дополнительные сведения см. в разделе Практическое руководство. Создание проекта приложения Windows.
Примечание о безопасности.
Для вызова веб-методов требуется уровень прав доступа, предоставляемый классом WebPermission. При работе на обычном уровне безопасности в процессе может возникнуть исключение. Дополнительные сведения см. в разделе Основы управления доступом для кода.
В обозревателе решений щелкните правой кнопкой мыши узел проекта Ссылки и выберите Добавить веб-ссылку.
Появится диалоговое окно Добавление веб-ссылки.
В поле Адрес введите следующий URI веб-службы и нажмите клавишу ВВОД.
https://localhost/WebService1/Service1.asmx
Это URI веб-службы, созданной ранее. Веб-методы WebAdd и WebMultiply отображаются в левой части окна Добавление веб-ссылки.
Нажмите кнопку Добавить ссылку.
Из панели элементов перетащите в форму три элемента управления TextBox и два элемента управления Button. Текстовые поля предназначены для чисел, а кнопки будут использоваться для вычислений и вызова методов веб-служб.
Установите свойства элементов управления следующим образом.
Элемент управления
Свойство
Текст
TextBox1
Text
0
TextBox2
Text
0
TextBox3
Text
0
Button1
Text
Добавить
Button2
Text
Произведение
Щелкните форму правой кнопкой мыши и выберите команду Просмотреть код.
Создайте экземпляр веб-службы как член класса. Необходимо знать имя сервера, на котором ранее создавалась веб-служба.
' 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();
Создайте обработчик событий для события 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); }
Создайте обработчик событий для события 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); }
Нажмите клавишу F5 для запуска приложения.
Введите значения в первые два текстовых поля. При нажатии кнопки Сумма в третьем текстовом поле должна отобразиться их сумма. При нажатии кнопки Произведение в третьем текстовом поле должно отобразиться произведение.
Примечание.
Первый вызов веб-службы требует от сервера времени на обработку, так как экземпляр веб-службы создается на этом сервере. Помните об этом, нажимая кнопки в приложении. Это отставание описывается в следующем разделе.
Следующие действия
При вызове асинхронных методов веб-служб приложение продолжает работать во время ожидания ответа веб-службы. Это позволяет эффективно использовать ресурсы клиентского приложения.
Дополнительные сведения см. в разделе Практическое руководство. Асинхронный доступ к веб-службе в управляемом коде.
См. также
Задачи
Основные понятия
Выбор между формами Windows Forms и веб-формами
Практическое руководство. Создание прокси для веб-службы