Architecture Net



         

Особенности форматирования данных согласно спецификации SOAP


Прежде чем завершить предварительное знакомство с протоколом SOAP и языком WSDL, мы более пристально рассмотрим взаимосвязь между протоколом SOAP, языком WSDL и спецификацией XML Schema. Как упоминалось раньше, способ кодирования данных, которые передаются по протоколу SOAP между удаленными приложениями, построенными на основе технологии .NET, отличается от способа кодирования данных, который используется Web-службами и параллельно-последовательным преобразователем (serializer) языка XML.

Чтобы проиллюстрировать отличия между этими двумя способами кодирования данных, передающихся по протоколу SOAP, мы рассмотрим две программы, которые преобразуют один и тот же объект в последовательную форму. Обе программы создают кольцевой, или циклический список, состоящий из двух элементов типа customer (клиент). Первая программа кодирует данные, используя параллельно-последовательный преобразователь (serializer) SOAP платформы .NET. Вторая программа кодирует данные, передающиеся по протоколу SOAP, так, как это делают Web-службы. Программы расположены в каталоге SOAP Differences в подкаталогах Formatter (Форматер) и WebServ-ice соответственно.

Первая программа, Formatter (Форматер), сначала создает циклический список, а затем с помощью SOAP-форматера среды .NET, преобразует его в последовательную форму и сохраняет на диске в файле cust.xml. Чтобы продемонстрировать именно SOAP-сериализацию (и ее отличие от методики, применяемой Web-службами), мы создадим класс Test (Тест), производный от класса WebService. Ниже приведено содержимое файла Formatter.h. Обратите внимание, что класс Customer (Клиент) имеет атрибут Serializ-able (Преобразуемый в последовательную форму).

[Serializable]
// [Преобразуемый в последовательную форму]
public _gc class Customer
// класс сборщика мусора Клиент
{
public:
String *name; // Строка
long id; // идентификатор
Customer *next; // Клиент
};
public _gc class Test : public WebService
// класс сборщика мусора Испытание: WebService
{
public:
static void Main()
{
Test *test = new Test; // Испытание
Customer *list = test->GetList();
FileStream *s =
new FileStream("cust.xml", FileMode::Create);
// Создать файл
SoapFormatter *f = new SoapFormatter;
f->Serialize (s, list);
// Преобразовать в последовательную форму (s, список);
s->Close ();
}
Customer *GetList() // Клиент
{
Customer *custl = new Customer;
// Клиент *custl = новый Клиент;
cust1->name = "John Smith"; // Джон Смит
cust1->id = 1; // идентификатор = 1
Customer *cust2 = new Customer;
// Клиент *cust2 = новый Клиент;
cust2->name = "Mary Smith"; // Мэри Смит
cust2->id =2; // идентификатор = 2
cust2->next = custl; // следующий
custl->next = cust2; // следующий
return custl;
}
};




Содержание  Назад  Вперед