Код 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