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


Добавление поддержки трассировки SOAP в клиентские приложения

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

При разработке клиентских приложений для собственных веб-служб с поддержкой XML в SQL Server полезным инструментом поиска и устранения ошибок будет возможность трассировать и просматривать сообщения SOAP, которыми обмениваются экземпляр SQL Server и клиентское приложение.

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

Данную библиотеку можно добавлять в существующие проекты SOAP-клиентов среды Visual Studio 2005. В нее включены образцы приложений, описанные в разделе Образцы приложений для отправки запросов SOAP со встроенной поддержкой HTTP. Рекомендуется ознакомиться с концептуальными и методическими сведениями, изложенными в разделах Настройка сервера для прослушивания запросов к собственным веб-службам с поддержкой XML и Написание клиентских приложений.

Кроме того, для ознакомления с форматом сообщений SOAP рекомендуется просмотреть следующие подразделы:

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

В следующей процедуре предполагается, что существующее клиентское приложение SOAP создано с помощью среды Visual Studio 2005, и что веб-ссылка на конечную точку HTTP SOAP была создана с помощью SQL Server, как показано в разделе Отправка запросов SOAP с помощью клиента Visual Studio 2005 (C#).

Добавление образца библиотеки трассировки SOAP в проект Visual Studio

  1. Скопируйте с помощью приложения «Блокнот» содержимое раздела Листинг кода на языке C# для образца библиотеки классов SQL-трассировки SOAP и сохраните его под именем «SqlSoapTracer.cs» в той же папке, где содержатся файлы проекта SOAP-клиента.

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

  3. Щелкните Открыть проект.

  4. Перейдите к файлу проекта SOAP-клиента (с расширением CSPROJ) и выберите его.

  5. В окне обозревателя решений выполните следующие шаги:

    1. Выберите имя проекта, щелкните правой кнопкой мыши и наведите курсор на пункт Добавить, а затем выберите Добавить существующий объект.

    2. В диалоговом окне Добавление существующего объекта перейдите к файлу SqlSoapTracer.cs, расположенному в папке, в которую он был сохранен на шаге 1, и выберите его.

    3. Выберите Показать все файлы, раскройте узел Веб-ссылки и выберите файл Reference.cs.

  6. В окне редактора кода обновите файл Reference.cs, добавив в него точки входа в веб-методы.

    Например, при добавлении поддержки трассировки SOAP в образец проекта, указанный в разделе Отправка SOAP-запросов с помощью клиента Visual Studio 2005 (C#), опубликованные точки входа в различные включенные в проект веб-методы отображаются следующим образом:

    public object[] GetCustomerInfo([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] System.Data.SqlTypes.SqlString CustomerID, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] ref System.Data.SqlTypes.SqlString OutputParam) {            object[] results = this.Invoke("s2MsgGetCustomerInfoSoapIn", new object[] {                        CustomerID,                        OutputParam});            OutputParam = ((System.Data.SqlTypes.SqlString)(results[1]));            return ((object[])(results[0]));        }...public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {            object[] results = this.Invoke("s1MsgUDFReturningAScalarSoapIn", new object[0]);            return ((System.Data.SqlTypes.SqlInt32)(results[0]));        }
    
  7. Чтобы добавить поддержку трассировки SOAP в случае выполнения веб-методов в коде клиента, добавьте следующий вызов snoopattribute() в код файла Reference.cs непосредственно перед точкой входа в каждый из веб-методов, которые необходимо трассировать, как показано в следующих строках кода.

    [snoopattribute()]public object[] GetCustomerInfo(...) {...}...[snoopattribute()]public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {...}
    

    При этом регистрируется расширение SOAP, вызывающее трассировку SOAP этих веб-методов при их выполнении.

Использование поддержки трассировки SOAP для тестирования приложения

Чтобы использовать расширения поддержки трассировки SOAP, указанные в предыдущем примере кода, при запуске клиентского приложения SOAP в среде разработки Visual Studio, необходимо выполнить следующие шаги.

  1. С помощью среды SQL Server Management Studio или программы командной строки osql добавьте веб-метод для отображения хранимой процедуры или пользовательской функции, которую необходимо протестировать на конечной точке.

    Дополнительные сведения см. в разделе Открытие доступа к программируемым функциям SQL через Интернет.

  2. Создайте проект клиентского приложения SOAP в среде Visual Studio, выполните его отладку и сборку, если это еще не сделано.

    При необходимости можно использовать образец проекта, приведенный в разделе Отправка SOAP-запросов с помощью клиента Visual Studio 2005 (C#).

  3. Добавьте класс SqlSoapTracer.cs в проект, как описано в предыдущем подразделе.

  4. Сохраните, соберите и запустите клиентское приложение в среде разработки Visual Studio.

    При запуске приложения создается объект средства просмотра буфера обмена Windows. При выполнении веб-методов, включенных в трассировку на шаге 3, в этом объекте для каждого из веб-методов отображается следующее:

    • Сообщение запроса SOAP-клиента, сформированное кодом клиента.

    • Сообщение ответа SOAP-сервера, возвращенное собственными веб-службами с поддержкой XML для SQL Server.

    Для просмотра содержимого буфера обмена после наступления трассируемого события можно вставить текущее содержимое буфера обмена Windows в приложение «Блокнот».

Как работает поддержка трассировки SOAP

Механизм трассировки использует предопределенные отзывы и события, являющиеся частью реализации собственных веб-служб с поддержкой XML в SQL Server. Они включают два события: BeforeSerialize и AfterSerialize.

Эти события и отзывы позволяют перехватывать SOAP-запросы и соответствующие им SOAP-ответы от сервера и перенаправлять их в поток вывода. В приведенном коде вывод перенаправляется в объект System.Windows.Forms.Clipboard. Объект Clipboard получает и отображает SOAP-запрос клиента и ответные сообщения сервера, которыми они обменялись, выполняя веб-методы, которым предшествовали вызовы snoopattribute().

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