LibKing » Книги » comp-programming » Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Тут можно читать онлайн Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - бесплатно полную версию книги (целиком). Жанр: comp-programming, издательство Издательский дом "Вильямс", год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
  • Название:
    ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом "Вильямс"
  • Год:
    2007
  • ISBN:
    ISBN 5-8459-1124-9
  • Рейтинг:
    3.2/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание краткое содержание

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - описание и краткое содержание, автор Эндрю Троелсен, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать онлайн бесплатно полную версию (весь текст целиком)

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать книгу онлайн бесплатно, автор Эндрю Троелсен
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

В качестве замечания подчеркнем, что wsdl.exe не определяет пространство имен .NET для упаковки генерируемых типов C#. если вы не укажете в командной строке флаг /n.

wsdl /out:proxy.cs /n:CalculatorClient http://localhost/CalcService/ Service.asmx?wsdl

Программный код агента

Если открыть сгенерированный файл агента, вы найдете там тип, который получается из System.Web.Services.Protocols.SoapHttpClientProtocol (если, конечно, вы не указали другой протокол связи с помощью опции /protocol).

public partial class CalculatorWebService:

System.Web.Services.Protocols.SoapHttpClientProtocol {

}

Этот базовый класс определяет ряд членов, используемых в рамках реализации типа агента. Описания некоторых из этих членов предлагаются в табл. 25.7.

Таблица 25.7.Основные члены типа SoapHttpClientProtocol

Унаследованные члены Описание
BeginInvoke() Метод, инициирующий асинхронный вызов Web-метода
CancelAsync() Метод (новый в .NET 2.0), отменяющий асинхронный вызов метода Web-сервиса XML, если вызов еще не завершен
EndInvoke() Метод, завершающий асинхронный вызов Web-метода
Invoke() Метод для синхронного вызова метода Web-сервиса
InvokeAsync() Метод (новый в .NET 2.0), предлагающий более предпочтительный вариант асинхронного вызова метода Web-сервиса
Proxy Свойство, получающее или устанавливающее информацию агента для запроса Web-сервиса через брандмауэр
Timeout Свойство, получающее или устанавливающее значение времени ожидания (в миллисекундах) для синхронных вызовов
Url Свойство, получающее или устанавливающее базовое значение URL сервера для запросов
UserAgent Свойство, получающее или устанавливающее значение для заголовка пользовательского агента в запросах

Конструктор, заданный по умолчанию

Заданный по умолчанию конструктор агента "жестко" определяет значение URL удаленного Web-сервиса и запоминает это значение в наследуемом свойстве Url.

public CalculatorWebService() {

this.Url = "http://localhost/CalcServicе/Service.asmx";

}

Очевидным недостатком такого подхода является то, что при переименовании или перемещении Web-сервиса XML класс агента приходится обновлять и перекомпилировать. Для построения более гибкого типа агента wsdl.exe предлагает использовать флаг /appsettingurlkey (который можно сократить до /urlkey). Если указать в командной строке этот флаг, конструктор агента будет содержать программную логику для чтения URL с помощью ключа, содержащегося в файле *.config клиента.

wsdl /out:proxy.cs /n:СаlcClient /urlkey: CalcUrlhttp://localhost/CalcService/Serviсе.asmx?wsdl

Если теперь проверить конструктор агента, заданный по умолчанию, вы обнаружите следующий программный код (заметьте, что если подходящий ключ не будет найден, в качестве резервного будет использоваться заданное конкретное значение URL).

public CalculatorWebService() {

string urlSetting = System.Configuration.ConfigurationManager.AppSettings["CalcUrl"];

if ((urlSetting != null)) {

this.Url = urlSetting;

} else {

this.Url = "http://localhost./CalcService/Service.asmx";

}

}

Соответствующий файл app.config на стороне клиента будет примерно таким.

‹?xml version="1.0" encoding="utf-8"?›

‹configuration›

‹appSettings›

‹add key ="CalcUrl"value="http://localhost/CalcService/Service.asmx" /›

‹/appSettings›

‹/configuration›

Поддержка синхронного вызова

Генерируемый агент определяет также поддержку синхронного вызова Web-методов. Например, синхронный вариант метода Subtract() реализуется так.

public int Subtract(int x , int y) {

object[] results = this.invoke("Subtract", new object[] {x, y});

return ((int)(results[0]));

}

Обратите внимание на то, что вызывающая сторона передает два параметра, "упакованные" в массив System.Object. Используя динамическое связывание, метод Invoke() передаст эти аргументы методу вычитания, размещенному по указанному адресу URL. По завершении этого (блокирующего) вызова будет обработан поступающий XML-код и результат будет возвращен вызывающей стороне в виде System.Int32 после соответствующего преобразования.

Поддержка асинхронного вызова

Поддержка асинхронного вызова Web-методов в .NET 2.0 сильно изменилась по сравнению с .NET 1.x. По своему предыдущему опыту вы можете знать, что агенты .NET 1.1 использовали методы BeginXXX()/EndXXX() для вызова Web-методов во вторичном потоке выполнения. Рассмотрите, например, следующие методы BeginSubtract() и EndSubtract().

public System.IAsyncResult BeginSubtract(int x, int y, System.AsyncCallback callback, object asyncState) {

return this.BeginInvoke("Subtract", new object[] {x, y}, callback, asyncState);

}

public int EndSubtract (System.IAsyncResult asyncResult) {

object[] results = this.EndInvoke(asyncResult);

return ((int) (results[0]));

}

Хотя wsdl.exe все еще генерирует эти знакомые методы Begin/End, в .NET 2.0 они считаются устаревшими, поскольку заменены новыми методами XXXAsync().

public void SubtractAsync(int x, int y) {

this.SubtractAsync(x, y, null);

}

Новые методы XXXAsync() (как и связанный с ними метод CancelAsync()) работают в паре с автоматически генерируемым вспомогательным методом (являющимся перегруженной версией некоторого специального метода XXXAsync()), который обрабатывает асинхронные операции, используя синтаксис событий C#. Если рассмотреть программный код агента, вы увидите, что wsdl.exe генерирует (для каждого Web-метода) пользовательский делегат, пользовательское событие и пользовательский класс "event args", чтобы получить соответствующий результат.

Создание приложения клиента

Теперь, когда вы лучше понимаете внутреннюю композицию генерируемого агента, давайте попытаемся его использовать. Создайте новое консольное приложение с именем CalculatorClient, добавьте в проект файл proxy.cs с помощью выбора Project→Add Existing Item из меню и добавьте ссылку на компоновочный блок System.Web.Services.dll. Затем измените метод Main() так, как предлагается ниже.

class Program {

static void Main(string[] args) {

Console.WriteLine("***** Забавы c агентами WS *****\n");

// Создание агента.

CalculatorWebService ws = new CalculatorWebService();

// Синхронный вызов метода Add().

Console.WriteLine("10 + 10= {0}", ws.Add(10, 10));

// Асинхронный вызов метода Subtract с помощью

// нового подхода .NET 2.0 на основе событий.

ws.SubtractCompleted += new SubtractCompleteEventHandler(ws_SubtractCompleted);

ws.SubtractAsync(50, 45);

// Продолжение работы консоли для гарантии получения

// результата вычитания.

Console.RеаdLine();

}

static void ws_SubtractCompleted(object sender, SubtractCompletedEventArgs e) {

Console.WriteLine("Baш ответ: {0} ", e.Result);

}

}

Обратите внимание на то, что новая логика асинхронного вызова в .NET 2.0 непосредственно отображается в синтаксис событий C#, который, согласитесь, является более аккуратным по сравнению с использованием методов BeginXXX()/EndXXX(), интерфейса IAsyncResult и делегата AsyncCallback.

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Эндрю Троелсен читать все книги автора по порядку

Эндрю Троелсен - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание отзывы


Отзывы читателей о книге ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание, автор: Эндрю Троелсен. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img