Вход/Регистрация
Интернет-журнал "Домашняя лаборатория", 2007 №6
вернуться

Журнал «Домашняя лаборатория»

Шрифт:

<<<IN>>> parameters: (

}

===System.MarshalByRefObject, mscorlib, Version=1.0.3300.0,

Culture=neutral, PublicKeyToken=b77a5c561934e089

InitializeLifetimeservice

<<<OUT>>> parameters: (

}

===clr: SPbU.AOP_NET.Account, MyServer

Add

<<<IN>>> parameters: {

sum= 5

'

clientProcessId= 192)

===clr: SPbU.AOP_NET.Account, MyServer

Add

<<<IN>>> parameters: {

sum= 5

'

clientProcessId= 165)

===clr: SPbU.AOP_NET.Account, MyServer

Add

<<<OUT>>> parameters: {

}

===clr: SPbU.AOP_NET.Account, MyServer

Add

<<<OUT>>> parameters: {

}

===clr: SPbU.AOP_NET.Account, MyServer

Add

<<<IN>>> parameters: {

sum= 5

'

clientProcessId= 192)

===clr: SPbU.AOP_NET.Account, MyServer

Add

<<<OUT>>> parameters: {

}

Компоненты размещаются в двух контекстах, но в одном домене синхронизации

Закомментируем атрибут Synchronization , приписанный классу Account. Теперь, просматривая вывод на консоль сервера, можно заметить, что компонент Account размещается в контексте 1, а компоненты Tax и News в контексте 2:

Server is listening

News context = 2 News constructor thread = 9 IsPoolThread = True

Tax context = 2 Tax constructor thread = 9 IsPoolThread = True

Account context = 1 Account constructor thread = 9 IsPoolThread = True

…….

Просматривая файл LogFile видим, что теперь перехватываются вызовы к компонентам Tax и News, поступающие от компонента Account:

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

Culture=neutral, PublicKeyToken=null

ctor

<<<IN>> parameters: {

}

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

Culture=neutral, PublicKeyToken=null

ctor

<<<OUT>>> parameters: {

}

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

Culture=neutral, PublicKeyToken=null

Notify

<<<IN>>> parameters: {

msg= new Account operation: +5)

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

Culture=neutral, PublicKeyToken=null

Notify

}

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

Culture=neutral, PublicKeyToken=null

get_news

<<<IN>>> parameters: {

}

===SPbU.AOP_NET.Tax, MyServer, Version=0.0.0.0,

Culture=neutral, PublicKeyToken=null

get_news

<<<OUT>>> parameters: {

}

===SPbU.AOP_NET.News, MyServer, Version=0.0.).0,

Culture=neutral, PublicKeyToken=null

Notify

<<<IN>>> parameters: {

msg= direct notification from Account)

===SPbU.AOP_NET.News, MyServer, Version=0.0.0.0,

Culture=neutral, PublicKeyToken=null

Notify

<<<OUT>>> parameters: {

}

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

Внесем в код сервера следующие дополнения:

namespace SPbU.AOP_NET {

……

public class Account: ContextBoundObject, IAccumulator,

IAudit, IAccumulatorNew{

……

public Account {

……

SynchronizationAttribute syncProperty =

(SynchronizationAttribute)

Thread.CurrentContext.GetProperty {

"Synchronization");

Console.WriteLine {

"Account syncProperty == Tax syncProperty "+

Object.ReferenceEquals(syncProperty, _tax.syncProperty));

  • Читать дальше
  • 1
  • ...
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: