Симон Робинсон - C# для профессионалов. Том II

Тут можно читать онлайн Симон Робинсон - C# для профессионалов. Том II - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Лори, год 2003. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    C# для профессионалов. Том II
  • Автор:
  • Жанр:
  • Издательство:
    Лори
  • Год:
    2003
  • Город:
    Москва
  • ISBN:
    5-85582-187-0
  • Рейтинг:
    4.88/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Симон Робинсон - C# для профессионалов. Том II краткое содержание

C# для профессионалов. Том II - описание и краткое содержание, автор Симон Робинсон, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
C# для профессионалов

Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.

В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.

Для кого предназначена эта книга

Эта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.

Основные темы книги

• Все особенности языка C#

• C# и объектно-ориентированное программирование

• Приложения и службы Windows

• Создание web-страниц и web-служб с помощью ASP NET

• Сборки .NET

• Доступ к данным при помощи ADO NET

• Создание распределённых приложений с помощью NET Remoting

• Интеграция с COM, COM+ и службой Active Directory

C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)

C# для профессионалов. Том II - читать книгу онлайн бесплатно, автор Симон Робинсон
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

□ Для асинхронных сообщений вызывается метод AsyncProcessMessage()предыдущим приемником в цепочке или удаленной инфраструктурой. AsyncProcessMessage()имеет два параметра, куда могут передаваться сообщение и приемник сообщения, который получает ответ.

Рассмотрим три доступных для использования приемника сообщения.

Уполномоченный приемник

Можно получить цепочку уполномоченных приемников с помощью интерфейса IEnvoyInfo. Маршализованная объектная ссылка ObjRefимеет свойство EnvoyInfo, которое возвращает интерфейс IEnvoyInfo. Список уполномоченных приемников создается из серверного контекста, поэтому сервер может добавлять функциональность клиенту. Уполномоченные приемники собирают информацию об идентичности клиента и предают ее серверу.

Приемник серверного контекста

Когда сообщение получено на серверной стороне канала, оно передается приемникам серверного контекста. Последний из этих приемников направляет сообщение в цепочку объектных приемников.

Объектный приемник

Объектный приемник ассоциируется с определенным объектом. Если объектный класс определяет атрибуты определенного контекста, то для объекта создаются приемники контекста.

Передача объектов в удаленные методы

Типы параметров для вызовов удаленных методов не ограничены только базовыми типами данных, но могут также быть классами, которые определяет программист. Для удаленных методов различают три типа классов:

Классы, маршализуемые по значению, обычно сериализуются через канал. Классы, которые должны быть маршализованы, либо реализуют интерфейс ISerializable, либо помечаются с помощью атрибута [Serializable]. Объекты этих классов не имеют удаленной идентичности, так как весь объект маршализуется через канал, а объект, который сериализуется клиенту, является независимым от серверного объекта (или наоборот). Классы, маршализуемые по значению, называются также несвязанными классами, так как они не имеют данных, которые зависят от домена приложения.

Классы, маршализуемые по ссылке,имеют удаленную идентичность. Объекты не передаются по линиям связи, а вместо этого возвращается прокси. Класс, который маршализуется по ссылке, должен выводиться из MarshalByRefObject. Объекты MarshalByRefObjectназывают объектами, связанными с доменом приложения.Специализированной версией MarshalByRefObjectявляется класс ContextBoundObject: абстрактный класс ContextBoundObjectвыводится из MarshalByRefObject. Если класс выводится из ContextBoundObject, требуется прокси даже в том же самом домене приложения, когда пересекаются границы контекстов.

□ Классы, которые не являются сериализуемыми и не выводятся из MarshalByRefObject, не могут использоватьсяв параметрах открытых методов удаленных объектов. Эти классы связаны с доменом приложения, где они созданы. Такие классы должны использоваться, если класс имеет члены данных, допустимые только в домене приложения, такие как дескриптор файла Win32.

Чтобы увидеть маршализацию в действии, изменим удаленный объект для пересылки двух объектов клиенту: пусть класс MySerializedпосылает маршализацию по значению, а класс MyRemoteмаршализует по ссылке. В методах сообщение записывается на консоль, чтобы можно было проверять, сделан ли вызов на клиенте или на сервере. Кроме того, класс Hello изменяется, чтобы возвращать экземпляры MySerilizedи MyRemote:

using System;

namespace Wrox.ProfessionalCSharp {

[Serilizable]

public сlass MySerilized {

public MySerilized(int val) {

a = val;

}

public void Foo() {

Console.WriteLine("MySerialized.Foo called");

}

public int A {

get {

Console.WriteLine("MySerialized A called");

return a;

}

set {

a = value;

}

}

protected int a;

}

public class MyRemote : System.MarshalByRefObject {

public MyRemote(int val) {

a = val;

}

public void Foo() {

Console.WriteLine("MyRemote.Foo called");

}

public int A {

get

Сonsole.WriteLine("MyRemote.A called");

return a;

}

set {

a = value;

}

}

protected int a;

}

///



/// Краткое описание Class1

///

public class Hello : System.MarshalByRefObject {

public Hello() {

Console.WriteLine("Constructor called");

}

~Hello() {

Console.WriteLine("Destructor called");

}

public string Greeting(string name) {

Console.WriteLine("Greeting called");

return "Hello, " + name;

}

public MySerialized GetMySerilized() {

return new MySerialized(4711);

}

public MyRemote GetMyRemote() {

return new MyRemote(4712);

}

}

}

Клиентское приложение также необходимо изменить, чтобы увидеть результаты при использовании маршализации объектов по значению и по ссылке. Мы вызываем методы GetMySerialized()и GetMyRemote(), чтобы получить новые объекты и проверить, не используется ли прозрачный прокси.

ChannelServices.RegisterChannel(new TcpChannel());

Hello obj =

(Hello)Activator.GetObject(typeof(Hello),

"tcp://localhost:8086/Hi");

if (obj == null) {

Console.WriteLine("could not locate server");

return;

}

MySerialized ser = obj.GetMySerialized();

if (!RemotingServices.IsTransparentProxy(ser)) {

Console.WriteLine("ser is not a transparent proxy");

}

ser.Foo();

MyRemote rem = obj.GetMyRemote();

if (RemotingServices.IsTransparentProxy(rem)) {

Console.WriteLine("rem is a transparent proxy");

}

rem.Foo();

В консольном окне клиента видно, что объект serвызывается на клиенте. Этот объект не является прозрачным прокси, так как он сериализуется клиенту. В противоположность этому, объект remна клиенте является прозрачным прокси. Методы, вызванные для этого объекта, передаются на сервер:

В серверном выводе можно видеть что метод Fooвызывается с удаленным объектом - фото 126

В серверном выводе можно видеть, что метод Foo()вызывается с удаленным объектом MyRemote:

Направляющие атрибуты Удаленные объекты никогда не передаются по линиям связи - фото 127

Направляющие атрибуты

Удаленные объекты никогда не передаются по линиям связи в отличие от типов данных значений и сериализуемых классов. Иногда желательно послать данные только в одном направлении. Это особенно важно, когда данные передаются по сета. С помощью COM можно было объявить для аргументов направляющие атрибуты [in], [out]и [in, out], если данные должны посылаться на сервер, клиенту или в обоих направлениях.

В C# существуют аналогичные атрибуты как часть языка: параметры методов refи out. Параметры методов refи outмогут использоваться для типов данных значений и для ссылочных типов, которые способны сериализоваться. С помощью параметра refаргумент маршализуется в обоих направлениях, outидет от сервера клиенту, а в отсутствие параметра метода посылает данные серверу.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Симон Робинсон читать все книги автора по порядку

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




C# для профессионалов. Том II отзывы


Отзывы читателей о книге C# для профессионалов. Том II, автор: Симон Робинсон. Читайте комментарии и мнения людей о произведении.


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

Напишите свой комментарий
x