Иллюстрированный самоучитель по Architecture .NET

Передача структур в качестве входных и выходных параметров. Резюме.

Вот простой пример того, как метод Web-службы может использовать структуры в качестве входных и выходных параметров. В исходный файл ATLServerWeb.h была добавлена структура MyStructure (Моя структура), содержащая два элемента типа int. Кроме того, в интерфейс IATLServerWebService был добавлен новый метод CopyMyStructure (Копировать мою структуру), который в качестве параметров передает в MyStructure указатели и принимает их от нее. Затем данный метод реализуется в классе CATLServerWebService.

namespace ATLServerWebService
// пространство имен ATLServerWebService
{
struct MyStructure
{
int x;
int y;
};
[
uuid("53A879FF-9D20-42A8-9978-COD4B05B10B7"),
object / / объект
]
interface IATLServerWebService // интерфейс
{
HRESULT CopyMyStructure (
[in ] MyStructure *pms1, [out ] MyStructure *pms2);
};
class CATLSeir-verWebService:
public IATLServerWebService
{
public:
[ soap me tihod ]
HRESULT CopyMyStructure(
MyStructure *pms1, MyStructure *pms2)
{
pms2 › x = pms1 › x;
pms2 › y = pms1 › y;
return S_OK;
}
};

А вот клиентский код, который проверяет передачу входных и выходных параметров.

// передача указателей на структуры
// в качестве входных и выходных параметров
struct ATLServerWebService: – . MyStructure msl, ms2;
ms1.x = 10;
msl.у = 20;
ms2.x = 0;
ms2.y = 0;
wprintf(
L"ms1.x: %d, ms1.y: %d, ms2.x: %d, ms2.y: %d\n",
ms1.x, ms1.y, ms2.x, ms2.y);
wprintf(
L"Calling CopyMyStructure(&ms1, &ms2)\n",
ms2.x, ms2.y);
service.CopyMyStructure (// служба
&ms1,
sizeof (ATLServerWebService::MyStructure),
&ms2);
wprintf(
L"ms1.x: %d, ms1.y: %d, ms2.x: %d, ms2.y: %d\n",
ms1.x, ms1.y, ms2.x, ms2.y);

Приводимая далее выдача программы доказывает, что маршализация структуры может выполняться в обоих направлениях. Вначале элементы х и у структуры ms2 содержат нулевые значения. Во время вызова метода CopyMyStructure структура ms2 изменяется, поскольку элементы копируются из ms1, а затем ms2 передается обратно клиенту.

msl.x: 10, msl.y: 20, ms2.x: 0, ms2.y: 0
Calling CopyMyStructure(&msl, &ms2)
msl.x: 10, msl.y: 20, ms2.x: 10, ms2.y: 20

Сейчас вас, возможно, удивит, зачем было затевать столько работы. И чем это все лучше предоставления функций в виде динамически подключаемой библиотеки (DLL) или вызова удаленных процедур (RFCRemote Procedure Call) или распределенной модели компонентных объектов (DCOMDistributed Component Object Model)? Так вот, "крутизна" Web-службы как раз в том, что она, в отличие от динамически подключаемой библиотеки (DLL), может находиться в любом месте Internet. Кроме того, Web-службы, в отличие от вызова удаленных процедур (RFCRemote Procedure Call) или распределенной модели компонентных объектов (DCOMDistributed Component Object Model), создаются на основе языка XML и SOAP. В дальнейшем это позволит вам применять некоторые интересные возможности, связанные с интеграцией.

Резюме

Web-службы позволяют создавать крупномасштабные распределенные приложения, которые могут использовать вездесущую природу Internet. Эти службы строятся на основе стандартных и повсеместных протоколов, таких, как HTML, XML и SOAP, поэтому они значительно более гибки и естественны, чем построенные на основе традиционных распределенных компьютерных технологий, таких, например, как вызов удаленных процедур (RFCRemote Procedure Call). Библиотека шаблонных классов ATL предоставляет возможности для создания Web-служб, и благодаря своей эффективности является идеальным средством для реализации тех Web-служб, от которых требуется высокая производительность.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.