Чтение онлайн

на главную

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №6
Шрифт:

Серверное приложение

Ниже приводится код из файла MyServer.cs, который является некоторым расширением одноименного файла, рассмотренного в предыдущей главе.

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using System.Threading;

using System.Runtime.Remoting.Contexts;

namespace SPbU.AOP_NET {

public interface IAccumulator {

void Add(int sum);

}

public interface IAudit {

int Total;

}

[Synchronization]

[MyCallTrace("LogFile")]

public class Account: ContextBoundObject,

IAccumulator, IAudit {

private Tax _tax;

private int _sum = 0;

public Account {

_tax = new Tax ;

Console.WriteLine("Account context = " +

Thread.CurrentContext.ContextID + "\n" +

"Account constructor thread = " +

Thread.CurrentThread.GetHasheode +

" IsPoolThread = " +

Thread.CurrentThread.IsThreadPoolThread);

}

public void Add(int sum) {

_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);

}

public int Total {

return _sum;

}

}

[Synchronization]

[MyCallTrace("LogFile")]

public class Tax: ContextBoundObject {

private News _news;

public Tax {

_news = new News;

Console.WriteLine("Tax context = " +

Thread.CurrentContext.ContextID + "\n" +

"Tax constructor thread = " +

Thread.CurrentThread.GetHasheode +

" IsPoolThread = " +

Thread.CurrentThread.IsThreadPoolThread);

}

public void Notify(String msg) {

Console.WriteLine("Tax notification: " + msg);

Console.WriteLine("Tax Notify thread = " +

Thread.CurrentThread.GetHasheode +

" IsPoolThread = " +

Thread.CurrentThread.IsThreadPoolThread);

_news.Notify(msg);

}

public News news {

get {

return _news;

}

}

}

[Synchronization]

[MyCallTrace("LogFile")]

public class News: ContextBoundObject {

public News{

Console.WriteLine("News context = " +

Thread.CurrentContext.ContextID + "\n" +

"News constructor thread = " +

Thread.CurrentThread.GetHasheode +

" IsPoolThread = " +

Thread.CurrentThread.IsThreadPoolThread);

}

public void Notify(String msg) {

Console.WriteLine("News notification: " + msg);

Console.WriteLine("News Notify thread = " +

Thread.CurrentThread.GetHasheode +

" IsPoolThread = " +

Thread.CurrentThread.IsThreadPoolThread);

}

}

public class AccountApp {

public static void Main{

HttpChannel myChannel = new HttpChannel(8080);

ChannelServices.RegisterChannel(myChannel);

RemotingConfiguration.RegisterWellKnownServiceType (

typeof(Account), "Account",

WellKnownObjectMode.Singleton);

Console.WriteLine("Server is listening");

Console.ReadLine;

Console.WriteLine("Bye");

}

}

}

Некоторые

комментарии:

1. Определяемые в этом коде классы включаются в новое пространство имен — SPBU. AOP_NET. В этом же пространстве имен будет определен далее и атрибут трассировки вызовов MyCallTraceAttribute. При выборе имени пространства имен использовалась следующая рекомендация — префикс имени должен определять организацию, в которой работает разработчик. Попутно стоит заметить, что атрибут SynchronizationAttribute принадлежит пространству имен System.Runtime.Remoting.Contexts.

2. Классу Account наряду с атрибутом синхронизации (можно опустить часть "Attribute" при задании имени атрибута) приписан атрибут трассировки вызовов — [MyCallTrace ("LogFile")]. Здесь аргумент задает имя файла в рабочем каталоге, в конец которого будут записываться данные о вызовах методов этого класса. Однако трассировка вызовов будет обеспечиваться не всегда. Это касается только вызовов, сделанных извне контекста, в котором живет объект — экземпляр данного класса. Трассировка вызовов внутри данного контекста не производится. Понятие контекста и семантика данного атрибута будут рассмотрены далее.

3. Код класса Account претерпел некоторые изменения по сравнению с предыдущей главой:

? Появилось поле _tax — ссылка на экземпляр класса Tах. Новый экземпляр этого класса активируется в конструкторе класса Account с помощью оператора new. В результате при построении на стороне сервера экземпляра класса Account в этом же домене приложения формируется новый экземпляр класса Tах.

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

Виконт. Книга 1. Второе рождение

Юллем Евгений
1. Псевдоним `Испанец`
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.67
рейтинг книги
Виконт. Книга 1. Второе рождение

Последний попаданец 3

Зубов Константин
3. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 3

Не грози Дубровскому! Том Х

Панарин Антон
10. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том Х

Я до сих пор не князь. Книга XVI

Дрейк Сириус
16. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я до сих пор не князь. Книга XVI

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Горькие ягодки

Вайз Мариэлла
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Горькие ягодки

Расческа для лысого

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
8.52
рейтинг книги
Расческа для лысого

Счастье быть нужным

Арниева Юлия
Любовные романы:
любовно-фантастические романы
5.25
рейтинг книги
Счастье быть нужным

Треск штанов

Ланцов Михаил Алексеевич
6. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Треск штанов

Титан империи 2

Артемов Александр Александрович
2. Титан Империи
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Титан империи 2

Законы Рода. Том 5

Flow Ascold
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Иван Московский. Первые шаги

Ланцов Михаил Алексеевич
1. Иван Московский
Фантастика:
героическая фантастика
альтернативная история
5.67
рейтинг книги
Иван Московский. Первые шаги

Пятое правило дворянина

Герда Александр
5. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пятое правило дворянина

Камень. Книга 3

Минин Станислав
3. Камень
Фантастика:
фэнтези
боевая фантастика
8.58
рейтинг книги
Камень. Книга 3