Добавление поддержки трассировки 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
Скопируйте с помощью приложения «Блокнот» содержимое раздела Листинг кода на языке C# для образца библиотеки классов SQL-трассировки SOAP и сохраните его под именем «SqlSoapTracer.cs» в той же папке, где содержатся файлы проекта SOAP-клиента.
Запустите среду Microsoft Visual Studio 2005 из группы программ Microsoft Visual Studio 2005 на клиентском компьютере.
Щелкните Открыть проект.
Перейдите к файлу проекта SOAP-клиента (с расширением CSPROJ) и выберите его.
В окне обозревателя решений выполните следующие шаги:
Выберите имя проекта, щелкните правой кнопкой мыши и наведите курсор на пункт Добавить, а затем выберите Добавить существующий объект.
В диалоговом окне Добавление существующего объекта перейдите к файлу SqlSoapTracer.cs, расположенному в папке, в которую он был сохранен на шаге 1, и выберите его.
Выберите Показать все файлы, раскройте узел Веб-ссылки и выберите файл Reference.cs.
В окне редактора кода обновите файл 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])); }
Чтобы добавить поддержку трассировки SOAP в случае выполнения веб-методов в коде клиента, добавьте следующий вызов snoopattribute() в код файла Reference.cs непосредственно перед точкой входа в каждый из веб-методов, которые необходимо трассировать, как показано в следующих строках кода.
[snoopattribute()]public object[] GetCustomerInfo(...) {...}...[snoopattribute()]public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {...}
При этом регистрируется расширение SOAP, вызывающее трассировку SOAP этих веб-методов при их выполнении.
Использование поддержки трассировки SOAP для тестирования приложения
Чтобы использовать расширения поддержки трассировки SOAP, указанные в предыдущем примере кода, при запуске клиентского приложения SOAP в среде разработки Visual Studio, необходимо выполнить следующие шаги.
С помощью среды SQL Server Management Studio или программы командной строки osql добавьте веб-метод для отображения хранимой процедуры или пользовательской функции, которую необходимо протестировать на конечной точке.
Дополнительные сведения см. в разделе Открытие доступа к программируемым функциям SQL через Интернет.
Создайте проект клиентского приложения SOAP в среде Visual Studio, выполните его отладку и сборку, если это еще не сделано.
При необходимости можно использовать образец проекта, приведенный в разделе Отправка SOAP-запросов с помощью клиента Visual Studio 2005 (C#).
Добавьте класс SqlSoapTracer.cs в проект, как описано в предыдущем подразделе.
Сохраните, соберите и запустите клиентское приложение в среде разработки 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.