Поделиться через


Отправка SOAP-запросов с использованием клиента Visual Studio 2005 (C#)

В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.

Этот подраздел содержит образцы приложений, в которых клиент Visual Studio 2005 отправляет SOAP-запросы экземпляру SQL Server и обрабатывает SOAP-ответы. Запросы отправляются методам конечных точек, созданным в разделе Образцы приложений, отправляющих запросы к собственным веб-службам с поддержкой XML.

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

ПримечаниеПримечание

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

Отправка SOAP-запросов

В этом приложении создается форма, содержащая кнопки и текстовые поля, необходимые для отправки SOAP-запросов к конечной точке.

При отправке SOAP-запроса значение идентификатора заказчика, указанное в текстовом поле, передается в качестве входного параметра хранимой процедуре GetCustomerInfo. Если в этом поле ничего не указано, передается пустая строка, и тогда возвращаются заказчики, для которых в качестве CustomerID указана пустая строка. Если введено значение NULL, возвращаются заказчики, у которых в качестве CustomerID введено значение NULL. В этом случае в SOAP-запрос автоматически добавляется атрибут xsi:nil = 'true', указывая на значение параметра, равное NULL.

Хранимая процедура GetCustomerInfo показывает, как работать с входными и выходными параметрами, сообщениями об ошибках и результатами. Приложение также отправляет SOAP-запросы к пользовательской функции. Кроме того, это приложение SOAP может обращаться к следующим нерегламентированным запросам:

  • запросу SELECT для получения списка всех сотрудников;

  • запросу SELECT для получения сотрудника, идентификатор которого передан в качестве входного параметра.

Обработка SOAP-ответов

Когда результаты SOAP-запроса возвращаются в виде массива объектов, клиентское приложение определяет тип каждого из объектов в нем и затем соответствующим образом обрабатывает каждый объект. Затем оно отображает следующие сведения о каждом из элементов массива объектов:

  • тип данных значения в элементе массива;

  • само значение: результирующий набор, код возврата, значения выходных параметров и т. д.

Создание рабочего образца

Так как создание этого образца состоит из множества шагов, приложение разделено на пять частей.

  • Часть 1. Выполнение хранимой процедуры GetCustomerInfo.

  • Часть 2. Выполнение хранимой процедуры.

  • Часть 3. Выполнение SQL-запроса без параметров.

  • Часть 4. Выполнение SQL-запроса с параметрами.

  • Часть 5. Выполнение пользовательской функции.

В каждой из частей содержится набор инструкций, а в конце каждой части работу приложения можно проверить.

Часть 1. Выполнение хранимой процедуры GetCustomerInfo

  1. На клиентском компьютере из группы программ Microsoft Visual Studio 2005 запустите Visual Studio 2005.

  2. Выберите Создать проект.

  3. Выберите Проекты Visual C# в качестве Типа проекта.

  4. Укажите NativeSOAPApp1 в качестве имени проекта

  5. Укажите местоположение для сохранения проекта.

  6. Выберите в качестве шаблона Приложение Windows, а затем нажмите кнопку ОК.

  7. В окне обозревателя решений щелкните правой кнопкой Ссылки, а затем выберите Добавить веб-ссылку. Есть и другой способ добавить веб-ссылку: в Конструктор щелкните Добавить веб-ссылку.

  8. В поле Адрес введите https://Server/sql?wsdl и нажмите клавишу ВВОД. При этом в URL-адрес необходимо ввести действительное имя сервера.

  9. Щелкните Добавить ссылку. Это действие создает необходимые классы-посредники, позволяющие вызывать методы в WSDL-документе.

Часть 2. Выполнение хранимой процедуры

  1. В меню «Вид» выберите Область элементов, чтобы в области «Form1.cs [Конструктор]» открылась область элементов. Для открытия области элементов можно также нажать CTRL + ALT + X.

  2. Добавьте на форму Form1 текстовое поле (textBox1), кнопку (button1) и список (listBox1).

  3. Щелкните правой кнопкой текстовое поле и выберите пункт Свойства. Измените значение Text в textBox1 на 1. Это значение идентификатора заказчика по умолчанию.

  4. Щелкните правой кнопкой мыши кнопку button1 и выберите пункт Свойства.

    1. Измените значение свойства Text с button1 на ExecSP.

    2. Измените значение свойства (name) на ExecSP.

  5. Щелкните правой кнопкой мыши список listBox1 и выберите пункт Свойства. Измените значение свойства HorizontalScrollbar на True.

  6. Дважды щелкните ExecSP.

  7. Скопируйте код из раздела Листинг кода C# для ExecSP в эту функцию.

  8. Обновите код. Замените ссылки на server именем узла, определенным во время создания конечной точки с помощью инструкции CREATE ENDPOINT.

  9. Сохраните и скомпилируйте проект. Дополнительные сведения см. в предыдущем подразделе «Компиляция кода».

Часть 3. Выполнение SQL-запроса без параметров

Эта часть клиентского приложения выполняет нерегламентированный запрос (FOR XML), который получает список сотрудников из таблицы Employee в базе данных AdventureWorks.

  1. На вкладке [Design] на форму Form1 добавьте еще одну кнопку (button1).

  2. Щелкните правой кнопкой мыши эту кнопку и выберите пункт Свойства.

    1. Измените значение свойства Text с button1 на BatchQueryFindAllEmps.

    2. Измените значение свойства (name) на BatchQueryFindAllEmps.

  3. Дважды щелкните BatchQueryFindAllEmps.

  4. Скопируйте код из раздела Листинг кода C# для BatchQueryFindAllEmps в эту функцию.

  5. Обновите код. Замените ссылки на server именем узла, определенным во время создания конечной точки с помощью инструкции CREATE ENDPOINT.

  6. Сохраните и скомпилируйте проект. Дополнительные сведения см. в предыдущем подразделе «Компиляция кода».

Часть 4. Выполнение SQL-запроса с параметрами

Эта часть аналогична предыдущей за исключением того, что SOAP-запрос для нерегламентированного запроса включает параметр запроса. Запрос FOR XML запрашивает сведения о сотруднике по указанному идентификатору.

  1. В форме Form1 добавьте кнопку (button1) на вкладку [Конструктор].

  2. Щелкните правой кнопкой мыши эту кнопку и выберите пункт Свойства.

    1. Измените значение свойства Text с button1 на BatchQueryFindAnEmp.

    2. Измените значение свойства (name) на BatchQueryFindAnEmp.

  3. Дважды щелкните BatchQueryFindAnEmp.

  4. Скопируйте код из раздела Листинг кода C# для BatchQueryFindAnEmp в эту функцию.

  5. Обновите код. Замените ссылки на server именем узла, определенным во время создания конечной точки с помощью инструкции CREATE ENDPOINT.

  6. Сохраните и скомпилируйте проект. Дополнительные сведения см. в предыдущем подразделе «Компиляция кода».

Часть 5. Выполнение пользовательских функций

В этой части клиентское приложение отправляет SOAP-запрос к веб-методу UDFReturningScalar. Веб-метод соответствует определяемой пользователем функции, отправляющей целочисленное значение.

  1. В форме Form1 добавьте кнопку (button1) на вкладку [Конструктор].

  2. Щелкните правой кнопкой мыши эту кнопку и выберите пункт Свойства.

    1. Измените значение свойства Text с button1 на ExecUDFReturningScalar.

    2. Измените значение свойства (name) на ExecUDFReturningScalar.

  3. Дважды щелкните ExecUDFReturningScalar.

  4. Скопируйте код из раздела Листинг кода C# для ExecUDFReturningScalar в эту функцию.

  5. Обновите код. Замените ссылки на server именем узла, определенным во время создания конечной точки с помощью инструкции CREATE ENDPOINT.

  6. Сохраните и скомпилируйте проект. Дополнительные сведения см. в предыдущем подразделе «Компиляция кода».

  7. Нажмите кнопку ExecUDFReturningScalar. Возвращенное от пользовательской функции значение отображается в списке.

Так как для конечной точки определена встроенная проверка подлинности, в коде имеется следующая строка: proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

Если используется проверка подлинности SQL Server, рекомендуется заменить ее кодом, реализующим заголовки WS-Security и обеспечивающим учетные данные на базе проверки подлинности SQL Server. Дополнительные сведения см. в разделе Проверка подлинности SQL Server по протоколу SOAP.

ПримечаниеПримечание

При использовании проверки подлинности SQL Server или обычной проверки подлинности SQL Server требует использования протокола SSL, чтобы обеспечить безопасную зашифрованную передачу учетных данных пользователя, которые в противном случае будут передаваться открытым текстом. Дополнительные сведения о включении протокола SSL для конечных точек HTTP см. в разделе Настройка сертификата для использования протоколом SSL.

Компиляция кода

При установке SQL Server устанавливается платформа .NET Framework 2.0. В данном руководстве по компиляции использована последняя версия .NET Framework (имеющая наибольший номер в папке \WINDOWS\Microsoft.NET\Framework)

Для компиляции кода образца

  1. Сохраните весь проект.

  2. Откройте командную строку и перейдите в папку, в которую он сохранен.

  3. Находясь в этой папке, скопируйте в нее файл Reference.cs из вложенной папки Web Reference\Server (например, скопируйте «Web Reference\Server\Reference.cs»). Файлы Form1.cs и Reference.cs должны находиться в одной и той же папке.

  4. Скомпилируйте код и укажите имя исполняемого (EXE) файла. Например, если имя исполняемого файла — NativeSOAPApp1.exe, то командная строка будет выглядеть так:

    \WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx\csc.exe /out:NativeSOAPApp1.exe Form1.cs Reference.cs

    xxxxx означает номер папки, который соответствует версии .NET Framework.

    В результате в текущем каталоге будет создан исполняемый файл (NativeSOAPApp1.exe).

Если используется более ранняя версия .NET Framework, может быть выдана ошибка выполнения. В этом случае попытайтесь обновить хранимую процедуру GetCustomerInfo путем добавления предложения FOR XML AUTO в конец инструкции SELECT следующим образом:

SELECT TOP 3 SalesOrderID, OrderDate FROM   SalesOrderHeaderWHERE  CustomerID = @CustomerIDFOR XML AUTO

Результаты выполнения хранимой процедуры отображаются в списке.