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

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

Шрифт:

Модификация кода сервера (MyServer.cs) связана с добавлением интерфейса IAccumuiatorNew:

……

namespace SPbU.AOP_NET {

public interface IAccumuiatorNew{

void Add(int sum, int clientProcessId);

}

……

public class Account: ContextBoundObject, IAccumulator,

IAudit, IAccumuiatorNew!

……

public void Add(int sum, int clientProcessId){

_sum += sum;

_tax.Notify("new Account operation: +" + sum);

_tax.news.Notify("direct notification from Account");

Console.WriteLine("Account Add thread = " +

Thread.CurrentThread.GetHasheode +

" IsPoolThread = " +

Thread.CurrentThread.IsThreadPoolThread +

" clientProcessId ="+ clientProcessId);

}

……

Необходимая модификация клиента (MуАрр. cs) представлена ниже

…….

using System.Diagnostics;

public class MyApp {

public static void Main {

HttpChannel с = new HttpChannel;

ChannelServices.RegisterChannel(c);

Process p = Process.GetCurrentProcess;

try {

……

for (int i=0; i<100; i++) {

a. Add(5, p.Id);

}

…….

}

…….

Вот фрагмент вывода на консоль сервера из которого видно, что клиент никак не связан с рабочим потоком, выполняющим его вызов на сервере.

Account Add thread = 65 IsPoolThread = True clientProcessId =192

Tax notification: new Account operation: +5

Tax Notify thread = 65 IsPoolThread = True

News notification: new Account operation: +5

News Notify thread = 65 IsPoolThread = True

News notification: direct notification from Account

News Notify thread = 65 IsPoolThread = True

Account Add thread = 65 IsPoolThread = True clientProcessId =192

Tax notification: new Account operation: +5

Tax Notify thread = 3 IsPoolThread = True

News notification: new Account operation: +5

News Notify thread = 3 IsPoolThread = True

News notification: direct notification from Account

News Notify thread = 3 IsPoolThread = True

Account Add thread = 3 IsPoolThread = True clientProcessId =165

Tax notification: new Account operation: +5

Tax Notify thread = 3 IsPoolThread = True

News notification: new Account operation: +5

News Notify thread = 3 IsPoolThread = True

News notification: direct notification from Account

News Notify thread = 3 IsPoolThread = True

…….

Еще стоит обратить внимание на то, что рабочий поток, выполняющий вызов метода Add компонента Account, выполняет и вызовы метода Notify для компонентов Tах и News, инициированные из компонента Account. Причина в том, что в рамках данного эксперимента все три компонента находятся в одном контексте синхронизации, и поток, вошедший в этот контекст, не выходит из него, пока не будут сделаны все вышеупомянутые вызовы. Только после этого другой поток может войти в данный контекст и начать выполнение метода Add.

Просмотрев файл LogFile, в который выполняется запись данных о перехваченных вызовах, можно заметить, что трассируются только вызовы к компоненту Account. Это объясняется тем, что именно компонент Account получает вызовы извне контекста (от клиентов), и эти вызовы перехватываются перехватчиком входящих вызовов атрибута трассировки. Вызовы, которые делаются к компонентам Tах и News, идут от компонентов Account и Tах и не пересекают границу контекста. Именно поэтому они и не перехватываются. Первые строки файла LogFile представлены ниже:

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

Culture=neutral, PublicKeyToken=null

ctor

<<<IN>>> parameters: (

}

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

Culture=neutral, PublicKeyToken=null

ctor

<<<OUT>>> parameters: {

}

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

Culture=neutral, PublicKeyToken=b77a5c561934e089

InitializeLifetimeservice

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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