Architecture Net

       

Web-служба Customer (Клиент)


Чтобы создать Web-службу Customer (Клиент), мы создадим с помощью шаблона Managed C++ Web Service (Web-служба на управляемом C++) проект Web-службы и назовем его CustomerWebService. Этот проект будет использован компонентом Customer (Клиент) для реализации деталей Web-службы. Ниже приведено содержимое файла CustomerWebService . asmx, который входит в состав проекта.

<%@ WebService class = "CustomerWebService.CustomerWebService" %>

А вот и код, реализующий класс CustomerWebService:



Рис. 11.12. AcmeWeb2 получает доступ к Web-службе

public _gc class CustomerWebService :
public WebService
// класс сборщика мусора CustomerWebService: WebService
{
private: // частный
Customers * customers; // Клиенты public:
CustomerWebService ()
{
customers = new Customers("HotelBroker");
// клиенты = новые Клиенты ("HotelBroker");
}
[WebMethod]
int RegisterCustomer(
String *firstName, // Строка
String *lastName, // Строка
String *emailAddress) // Строка
{
int customerId;
customerld = customers->RegisterCustomer( // клиенты
firstName, lastName, emailAddress) ;
return customerld;
}
[WebMethod]
void UnregisterCustomer(int customerId)
{
customers->UnregisterCustomer(customerld); // клиенты }
[WebMethod]
[Xmllnclude(_typeof(CustomerListltem))]
ArrayList *GetCustomer(int customerld)
{
ArrayList *ar;
ar = customers->GetCustomer(customerld) ; // клиенты
return ar;
}
[WebMethod]
void ChangeEmailAddress(
int customerld, String *emailAddress)
{
customers->ChangeEmailAddress( // клиенты
customerld, emailAddress);
}
};

В коде содержится единственный незнакомый нам атрибут Xmllnclude. Он указывает, что для преобразования определенного пользователем типа данных, в нашем случае CustomerListltem, XmlSerializer обычно может создать протокол SOAP. Этот атрибут находится в пространстве имен System: :Xml: : Serialization (Система::Xml:: Преобразование в последовательную форму). Тем не менее, если вы посмотрите на класс-заместитель данной Web-службы, который расположен в каталоге WebService-Proxies, вы увидите, что заместитель GetCustomer (customerproxy.cs) возвращает только массив объектов.


public object[] GetCustomer(int customerld)
// общедоступный объект[] GetCustomer(int customerld)

Данный атрибут указывает, что параллельно- последовательный преобразователь должен сохранить тип данных, определенный пользователем. Однако по протоколу SOAP могут передаваться лишь универсальные типы объектов. Поэтому код программы AcmeLib (содержится в файле Acme. cs) должен обрабатывать возвращаемый тип как объект, а затем извлечь из него тип, определенный пользователем.

object[] al = customers.GetCustomer(hotelCustomerld);
foreach(CustomerListltem cust in al)
{
currentUser.HotelCustomerld = hotelCustomerld;
currentUser.FirstName = cust.FirstName;
currentUser.LastName = cust.LastName;
currentUser.EmailAddress = cust.EmailAddress;
}

Все другие объекты компонентов Customer (Клиент) и Hotel (Гостиница) рассматриваемой Web-службы, которые содержатся в списке ArrayList, трактуются как массивы объектов, из которых нужно извлечь требуемый тип. Те массивы, которые используют такие типы данных, как строки и целые числа, обрабатывать с помощью XmlSerial-izer нет необходимости.

CompEbook.ru Железо, дизайн, обучение и другие


Содержание раздела