ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Обратите внимание на то, что новая логика асинхронного вызова в .NET 2.0 непосредственно отображается в синтаксис событий C#, который, согласитесь, является более аккуратным по сравнению с использованием методов BeginXXX/EndXXX, интерфейса IAsyncResult и делегата AsyncCallback.
Исходный код. Проект CalculatorClient размещен в подкаталоге, соответствующем главе 25.
Генерирование программного кода агента в Visual Studio 2005
Утилита wsdl.exe, конечно, предлагает целый ряд аргументов командной строки, которые позволяют контролировать результат генерирования класса агента, но Visual Studio 2005 позволяет быстро сгенерировать файл агента, используя диалоговое окно Add Web Reference (Добавление Web-ссылки), которое можно вызвать из Меню Project. Как видно из рис. 26.6, в этом окне вы можете получить ссылки на существующие Web-сервисы XML, размещенные в самых разных местах.
Замечание. Диалоговое окно Add Web Reference не позволяет ссылаться на Web-сервисы XML, которые обслуживаются WebDev.WebServer.exe.
Рис. 25.6. Диалоговое окно Add Web Reference
Обратите внимание на то, что вы имеете возможность не только получить список Web-сервисов на своей локальной машине, но и запросить различные каталоги UDDI (соответствующие вопросы будут обсуждаться в конце главы). Так или иначе, в результате ввода в строку URL подходящего значения, указывающего на действительный файл *.wsdl или *.asmx, вы добавите в проект новый класс агента. Заметьте, что пространство имен агента (зависящее от URL источника) будет вложено в рамки пространства имен вашего клиента .NET. Так, если для клиента с именем MyClientApp добавляется ссылка на Web-сервис, размещенный на вашей локальной машине, вы должны указать C#-директиву using следующего вида.
Замечание. В Visual Studio 2005 диалоговое окно Add Web Reference автоматически либо добавляет в проект новый файл app.config, содержащий значения URL ссылок на Web-сервисы XML, либо обновляет уже существующий.
Доступ к пользовательским типам Web-методов
В заключительном примере этой главы мы с вами выясним, как строить Web-сервисы, предлагающие доступ к пользовательским типам, а также
к более "экзотическим" типам из библиотек базовых классов .NET. Для примера мы создадим новый Web-сервис XML, который будет способен обрабатывать массивы, пользовательские типы и объекты DataSet ADO.NET. Сначала создайте новый Web-сервис XML с именем CarSalesInfoWS, размещенный в виртуальном каталоге IIS.Доступ к массивам
Создайте Web-метод GetSalesTagLines, который возвращает массив строк, представляющих данные текущих продаж различных автомобилей, и метод SortCarMakes, который позволит вызывающей стороне передать массив несортированных строк, чтобы обратно получить новый массив отсортированных строк.
Замечание. Страница тестирования, генерируемая с помощью DefaultWsdlHelpGenerator.aspx, не может вызывать методы, использующие в качестве параметров массивы типов.
Доступ к структурам
Протокол SOAP позволяет передачу XML.предcтавлений пользовательских типов данных (таких как классы и структуры). Web-сервисы XML используют тип XmlSerializer для преобразования типа в XML-код (см. главу 17, где имеется более подробная информация по этому поводу). Напомним, что XmlSerializer:
• не выполняет сериализацию приватных данных: для сериализации используются только открытые поля и свойства;
• требует, чтобы каждый позволяющий сериализацию класс имел конструктор, заданный по умолчанию;
• не требует использования атрибута [Serializable].
С учетом сказанного, наш следующий Web-метод будет возвращать массив структур SalesInfoDetails, определенных следующим образом.
Другим интересным моментом в отношении XmlSerializer является то, что этот тип позволяет осуществлять многослойный контроль представления типа. По умолчанию сериализация структуры SalesInfoDetails выполняется путем преобразования каждого поля данных поля в уникальный XML-элемент.