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

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

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

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

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

ms176041.note(ru-ru,SQL.90).gifПримечание.
В следующей процедуре предполагается, что существующее клиентское приложение SOAP создано в среде Visual Studio 2005 и в него добавлена веб-ссылка на конечную точку HTTP SOAP, созданная с помощью SQL Server 2005, как показано в разделе Отправка запросов 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 2005.
      Для просмотра содержимого буфера обмена после наступления трассируемого события можно вставить текущее содержимое буфера обмена Windows в приложение «Блокнот».

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

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

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

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

См. также

Справочник

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

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

Оптимальные методы использования собственных веб-служб с поддержкой XML

Справка и поддержка

Получение помощи по SQL Server 2005