Architecture Net или что такое Microsoft.NET?




Код Web-службы на основе ATL Server: ATLServerWebService.h

Главное, чем генерация Web-приложения отличается от генерации Web-службы, — это файл ATLServerWebService . h. В обоих случаях в этом файле определяется, хотя и с небольшим количеством отличий, класс обработчика запросов на основе ATL Server. В файле ATLServerWebService .h определяется также пространство имен и интерфейс доступа к Web-службе с помощью протокола SOAP. Вот код пусковой системы для этого файла. Обратите внимание, что в нем определяется интерфейс lATLServer-WebService. Именно этот интерфейс реализуется классом обработчика запросов, находящимся в одноименном исходном файле.

namespace ATLServerWebService
// пространство имен ATLServerWebService
{
// все структуры, перечисления и операторы typedef
// для вашей Web-службы должны быть размещены
// в этом пространстве имен
// IATLServerWebService - объявление интерфейса Web-службы
//
[
uuid("53A879FF-9D20-42A8-9978-COD4B05B10B7"),
object // объект
]
_interface lATLServerWebService // интерфейс
{
// HelloWorld - метод примера Web-службы на основе ATL Server.
//Он показывает, как объявить метод Web-службы, а также
// входные и выходные параметры
[id(1)] HRESULT HelloWorld( // идентификатор (1)
[in] BSTR bstrlnput, [out, retval] BSTR *bstrOutput);
// TODO: Add additional Web Service methods here
// TODO: Добавьте здесь дополнительные методы Web-службы
};
// ATLServerWebService - реализация Web-службы
//
[
request_handler(name="Default", // по умолчанию
sdl="GenATLServerWebWSDL") ,
soap_handler(
name="ATLServerWebService",
namespace="urn:ATLServerWebService", // пространство имен
protocol="soap" // протокол
)
]
class CATLServerWebService :
public lATLServerWebService
{
public:
// Это - пример метода Web-службы, который показывает как
// использовать атрибут soap_method, чтобы предоставить
// метод для использования как Web-метод
[ soap_method ]
HRESULT HelloWorld(
/*[in]*/ BSTR bstrlnput,
/*[out, retval]*/ BSTR *bstrOutput)
{
CComBSTR bstrOut(L"Hello "); // Привет
bstrOut += bstrInput;
bstrOut += L"!";
*bstrOutput = bstrOut.Detach();
return S_OK;
}
// TODO: Add additional Service methods here
// TODO: Добавьте здесь дополнительные методы Web-службы
};
// класс CATLServerWebService
}
// пространство имен ATLServerWebService

Создайте проект, а затем запустите его, как это обычно делается. В значениях свойств отладки проекта, установленных по умолчанию, задан унифицированный указатель информационного ресурса (URL) http://localhost/ATLServerWeb/ATLServerWeb .dll?Handler=GenATLServerWebWSDL. Результат просмотра этого унифицированного указателя информационного ресурса (URL) показан на рис. 12.25. При этом на самом деле никакие возможности Web-службы не вызываются. Просто на экран выводится XML-представление ее интерфейса.
Хотя просматривать эту страницу в броузере достаточно удобно, но такой способ доступа к Web-службе или ее использования нельзя назвать нормальным. Как правило, методы Web-службы вызываются клиентом из распределенного приложения. Чтобы увидеть, как это происходит, нам придется создать клиентскую программу, которая и будет делать такие вызовы.

25.gif

Рис. 12.25. Просмотр в броузере проекта Web-службы на основе библиотеки шаблонных классов ATL (Web A TL Service Project).