Net framework 5, а также среды Visual Studio 2012 и C#


Пример 3. Междоменное взаимодействие без продвижения



Download 6,27 Mb.
Pdf ko'rish
bet458/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   454   455   456   457   458   459   460   461   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Пример 3. Междоменное взаимодействие без продвижения
Этот пример очень похож на описанные ранее примеры 1 и 2. Точно так же соз-
дается новый домен, после чего вызывается метод 
CreateInstanceAndUnwrap
для 
загрузки той же сборки в новый домен приложений и создания в нем объекта 
MarshalByValType
. Переменная 
mbrt
ссылается на представитель этого объекта.
Затем через этого представителя я вызываю метод 
MethodArgAndReturn
, при-
нимающий один аргумент. Так как среда CLR должна контролировать изоляцию 
домена, она не может просто передать ссылку на аргумент в новый домен приложе-
ний. Для объекта, принадлежащего к типу, производному от 
MarshalByRefObject

CLR создает представитель и выполняет продвижение объекта по ссылке. Если 
тип объекта помечен атрибутом 
[Serializable]
, CLR сериализует объект (и его 
потомков) в байтовый массив, пакует этот массив в новый домен и десериализует 
его в граф объекта, передав корень графа методу 
MethodArgAndReturn
.
В этом примере я передаю объект 
System.String
через границы домена. Тип 
System.String
не является производным от класса 
MarshalByRefObject
, а значит, 
CLR не может создать представителя. К счастью, объект 
System.String
помечен 
атрибутом 
[Serializable]
, поэтому CLR в состоянии продвинуть его по значению, 
и код будет работать. Обратите внимание, что для типа 
String
CLR выполняет 
специальную оптимизацию. Продвигая объект 
String
через границу домена, CLR 


624
Глава.22 .Хостинг.CLR.и.домены.приложений
просто передает ссылку на него; копию объекта она не делает. Подобная оптимизация 
оказывается возможной благодаря неизменности объектов типа 
String
, что не дает 
коду из одного домена повредить символы объекта 
String
из другого. Дополнитель-
ную информацию о неизменности объектов данного типа вы найдете в главе 14
1
.
Внутри метода 
MethodArgAndReturn
я вывожу передаваемую в него строку, 
чтобы показать ее переход через границу домена. Затем я создаю экземпляр типа 
NonMarshalableType
и возвращаю ссылку на этот объект в основной домен. Так как 
тип 
NonMarshalableType
не является производным от 
System.MarshalByRefObject
и не помечен атрибутом 
[Serializable]
, метод 
MethodArgAndReturn
не может про-
двинуть объект по ссылке или по значению. То есть у нас нет способа передать объ-
ект через границы домена. Чтобы указать на этот факт, метод 
MethodArgAndReturn
генерирует в основном домене исключение 
SerializationException
. Так как моя 
программа не умеет его перехватывать, она просто прекращает свою работу.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   454   455   456   457   458   459   460   461   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish