SlideShare a Scribd company logo
1 of 30
Download to read offline
МАИ, каф 806, Сети ЭВМ 
ENTERPRISE SERVICES 
com + 
1
МАИ, каф 806, Сети ЭВМ 2 
.NET Enterprise Services. COM Базовые идеи 
Component Object Model (COM) создан в 1993 году для упрощения межмодульного взаимодействия и управления временем жизни объектов; 
Непривязанный к языкам программирования способ описания объектов (компонентов); 
Включает: 
 Поддерживает большое число языков программирования; 
 Автоматическое управление временем жизни объекта через подсчет ссылок на объектIUnknown; 
 Поддерживает работу с описанием объекта (IDL); 
 Поддерживает наследование интерфейсов; 
 Поддерживает позднее связывание; 
 Поддерживает создание многопоточных приложений; 
 Поддерживает распределенные транзакций с помощью MTS; 
Используется в основном только в OS Windows (95/98/NT/2000/2003/XP/Vista/2008/2012/7/8/10/Windows Phone 8); 
Альтернативными COM технологиями являются CORBA и JavaBeans;
МАИ, каф 806, Сети ЭВМ 3 
.NET Enterprise Services.COM основы. 
Программы строятся как набор взаимодействующих COM компонент. 
Компоненты идентифицируются с помощью идентификаторов GUID (Globally Unique Identifiers). Например, B058D6F9-AC1C-4369-A2C1-CD1DA693EE16; 
Каждый компонент предоставляет набор интерфейсов, для доступа к своей функциональности; 
Каждый интерфейс идентифицируется с помощью идентификаторов GUID; 
Интерфейсы 
 Наследуются от стандартного интерфейса IUnknown; 
 IUnknown состоит из методов: 
•AddRef; 
•Release; 
•QueryInterface; 
 Интерфейс должен удовлетворять свойствам: 
•Рефлективности (если у интерфейса запросить его же, то он вернет себя); 
•Симметрии (если интерфейс А доступен из B, тогда и B доступен из A); 
•Транзитивности(если A доступен из B, B доступен изC, то и А доступен из C); 
1.
МАИ, каф 806, Сети ЭВМ 4 
.NET Enterprise Services. IDL 
IDL позволяет описывать интерфейсы, типы и структуры данных; 
IDL может быть конвертирован в TLB файл (type library).Которая может быть использована для компеляции в конкретный язык программирования; 
Пример 
1.import "oaidl.idl"; 
2.import "ocidl.idl"; 
3.[object, 
4.uuid(2FFB4D41-052A-497C-BE43-71B1D09B6360), 
5.helpstring(" IMyInterfaceInterface"), 
6.pointer_default(unique)] 
7.interface IMyInterface: IUnknown 
8.{ 
9.[helpstring("method DoSomething")] 
10.HRESULT DoSomething([in] LPOLESTR word, [out,retval] VARIANT_BOOL *result); 
11.}; 
12.[ uuid(3FED244E-4367-4C8F-932C-C0DF67BEBAFC), 
13.version(1.0), 
14.helpstring(“MyClass1.0 Type Library") ] 
15.library ATLSPELLCHECKLib 
16.{ 
17.importlib("stdole32.tlb"); 
18.importlib("stdole2.tlb"); 
19.[ uuid(3D233E11-3661-4EA5-87C8-ABCFCFEE76BF), helpstring("Мой класс") ] 
20.coclass MyClass{ [default] interface IMyInterface; }; 
21.};
5 МАИ, каф 806, Сети ЭВМ 
.NET Enterprise Services. Registry 
 В Windows Registry (HKEY_CLASSES_ROOT) хранятся 
ссылки на 
 
Библиотеки типов COM 
 
Классы COM 
 
Интерфейсы COM 
 После своего создания любое COM приложение должно 
быть зарегистрировано в Registry 
 
с помощью утилит: 
• regsvr32.exe (обычные компоненты) 
• regsvcs.exe (.NET) 
1.
МАИ, каф 806, Сети ЭВМ 6 
.NET Enterprise Services. Простой пример COM+ компонента
МАИ, каф 806, Сети ЭВМ 7 
.NET Enterprise Services. Простой пример COM+ компонента 
Выполняется для 
 COM-классов 
 COM-интерфейсов 
 Всей сборки
МАИ, каф 806, Сети ЭВМ 8 
.NET Enterprise Services.Простой пример COM+ компонента 
Написание класса-интерфейса 
1.usingSystem; 
2.usingSystem.Collections.Generic; 
3.usingSystem.Text; 
4.usingSystem.Runtime.InteropServices; 
5.namespace_13_COMServer 
6.{ 
7.[Guid("39A0CD49-CB4B-46ca-831C-375E50E8DEFE")] 
8.publicinterfaceIMyCOMServer 
9.{ 
10.StringdoSomeAction(); 
11.} 
12.}
МАИ, каф 806, Сети ЭВМ 9 
.NET Enterprise Services. Простой пример COM+ компонента 
Написание класса COMобъекта 
1.usingSystem; 
2.usingSystem.Collections.Generic; 
3.usingSystem.Text; 
4.usingSystem.EnterpriseServices; 
5.usingSystem.Runtime.InteropServices; 
6.namespace_13_COMServer 
7.{ 
8.[Transaction(TransactionOption.Disabled)] 
9.[ClassInterface(ClassInterfaceType.AutoDual)] 
10.[Guid("F79A8505-D2AA-4504-8794-6D85498FE0B6")] 
11.publicclassMyCOMServerImpl: ServicedComponent,IMyCOMServer 
12.{ 
13.publicMyCOMServerImpl() : base() 
14.{ 
15.} 
16.publicstringdoSomeAction() 
17.{ 
18.return"Hello World!"; 
19.} 
20.} 
21.}
МАИ, каф 806, Сети ЭВМ 10 
.NET Enterprise Services. Простой пример COM+ компонента 
Устанавливаем свойства сборки 
1.usingSystem.Reflection; 
2.usingSystem.Runtime.CompilerServices; 
3.usingSystem.Runtime.InteropServices; 
4.usingSystem.EnterpriseServices; 
5.[assembly: AssemblyTitle("013_COMServer")] 
6.[assembly: AssemblyDescription("")] 
7.[assembly: AssemblyConfiguration("")] 
8.[assembly: AssemblyCompany("")] 
9.[assembly: AssemblyProduct("013_COMServer")] 
10.[assembly: AssemblyCopyright("Copyright © 2007")] 
11.[assembly: AssemblyTrademark("")] 
12.[assembly: AssemblyCulture("")] 
13.[assembly: ComVisible(true)] 
14.[assembly: ApplicationActivation(ActivationOption.Library)] 
15.[assembly: ApplicationAccessControl(false)] 
16.[assembly: Guid("bbbc01b2-5eb5-4309-9d65-182e2b2f10ed")] 
17.[assembly: AssemblyVersion("1.0.0.0")] 
18.[assembly: AssemblyFileVersion("1.0.0.0")]
МАИ, каф 806, Сети ЭВМ 11 
.NET Enterprise Services. . Простой пример COM+ компонента 
Генерирование Strong Name
МАИ, каф 806, Сети ЭВМ 12 
.NET Enterprise Services. Простой пример COM+ компонента 
Установка признака видимости сборки 
Регистрация COM+ с помощью regsvcs.exe
МАИ, каф 806, Сети ЭВМ 13 
.NET Enterprise Services. Простой пример COM+ компонента
МАИ, каф 806, Сети ЭВМ 14 
.NET Enterprise Services. Простой пример COM+ компонента 
Удобный вызывать COM+ компоненты удаленно –PROXY 
Proxy создается на машине с установленным COM+ объектом через приложение Component Services 
Proxy -это инсталлятор который генерирует COM+ объект на локальной машине, который вызывает настоящий COM+ объект.
МАИ, каф 806, Сети ЭВМ 15 
.NET Enterprise Services. Простой пример COM+ компонента 
Клиент (вариант с Proxy) 
1.usingSystem; 
2.usingSystem.Collections.Generic; 
3.usingSystem.Text; 
4.usingSystem.EnterpriseServices; 
5.namespace_14_COMClient 
6.{ 
7.classProgram 
8.{ 
9.staticvoidMain(string[] args) 
10.{ 
11._13_COMServer.IMyCOMServersrv = new_13_COMServer.MyCOMServerImpl(); 
12.Console.WriteLine(srv.doSomeAction()); 
13.Console.ReadLine(); 
14.ServicedComponent.DisposeObject((ServicedComponent)srv); 
15.} 
16.} 
17.}
МАИ, каф 806, Сети ЭВМ 16 
.NET Enterprise Services. Простой пример COM+ компонента 
Клиент (вариант без Proxy) 
1.usingSystem; 
2.usingSystem.Collections.Generic; 
3.usingSystem.Text; 
4.usingSystem.EnterpriseServices; 
5.namespace_14_COMClient 
6.{ 
7.classProgram 
8.{ 
9.staticvoidMain(string[] args) 
10.{ 
11.// Получаемтипком-объектаизегоCLSID... 
12.Typetype = Type.GetTypeFromCLSID(newGuid("F79A8505-D2AA-4504-8794-6D85498FE0B6"), "localhost"); 
13.// Создаемэкземпляр... 
14._13_COMServer.IMyCOMServersrv = (_13_COMServer.IMyCOMServer)Activator.CreateInstance(type); 
15.Console.WriteLine(srv.doSomeAction()); 
16.Console.ReadLine(); 
17.ServicedComponent.DisposeObject((ServicedComponent)srv); 
18.} 
19.} 
20.}
МАИ, каф 806, Сети ЭВМ 17 
.NET Enterprise Services.Поддержка транзакций 
Атрибут класса 
 [Transaction(TransactionOption.Required)] 
Атрибут метода 
 [AutoComplete] 
Явное управление 
 ContextUtil.SetComplete(); 
 ContextUtil.Abort(); 
1.
МАИ, каф 806, Сети ЭВМ 
TransactionOption 
Значение 
Описание 
Required 
Если вызывающий контекст содержит транзакцию, то используется он. Еслинет –то создается новый с транзакцией. 
RequiresNew 
Всегда создается новый с транзакцией. 
Supported 
Если вызывающий контекст с транзакцией, то выполняется в рамках транзакции. 
NotSupported 
Ни когда не участвует в транзакции (если вызван в транзакции, то создаетсяновый контекст без транзакции). 
Disabled 
Игнорируетсяесть ли транзакция в вызывающем компоненте или нет. 
18
МАИ, каф 806, Сети ЭВМ 
Пример Required, Supported, NotSupported, RequiresNew 
19
МАИ, каф 806, Сети ЭВМ 
AutoComplete 
[AutoComplete] 
public void AddCourse(Course c) 
{ 
try 
{ 
CourseData db = new CourseData(connectionString); 
db.AddCourse(c); 
} catch (Exception ex) 
{ 
// do some event logging 
// re-throw exception 
throw; 
} 
} 
20
МАИ, каф 806, Сети ЭВМ 
Транзакции в .NET 
using System; 
using System.Transactions; 
class TxDemo { 
static void Main() { 
using (TransactionScopescope = 
new TransactionScope( TransactionScopeOption.Required)) 
{ 
Course c = new Course(); 
c.Title = ".NET Enterprise Services"; 
CourseData db = new CourseData(connectionString); 
db.AddCourse(c); 
scope.Complete(); 
} 
} 
} 
21
МАИ, каф 806, Сети ЭВМ 
Синхронизация 
Activity –это логический домен, доступ к которому могут иметь только потоки с одним контекстом синхронизации. 
22
МАИ, каф 806, Сети ЭВМ 
SynchronizationOption 
Disabled Контекст синхронизации всегда игнорируется. 
NotSupported аналогично предыдущему случаю, однако если вызывающий контекст поддерживает синхронизацию, то создается новый без. 
Required Всегда используется контекст синхронизации. 
RequiresNew Всегда создается новый контекст синхронизации. 
SupportedЕсли вызывающий объект поддерживает синхронизацию –то работает в синхронизации, если нет, то без неё. 
23
МАИ, каф 806, Сети ЭВМ 
Пример 
[Synchronization(SynchronizationOption.Required)] 
[EventTrackingEnabled] 
public class B : ServicedComponent 
{ 
public void Sleep() 
{ 
Console.WriteLine("B.Sleep started"); 
Thread.Sleep(2000); 
Console.WriteLine("B.Sleep finished"); 
} 
public Guid GetActivityId() 
{ 
return ContextUtil.ActivityId; 
} 
} 
24
МАИ, каф 806, Сети ЭВМ 25 
.NET Enterprise Services. Управление активацией объекта 
При активации могут передаваться параметры в строке активации 
1.[ConstructionEnabled(Default=@"C:temp")] 
2.[EventTrackingEnabled] 
3.public class CoursesComponent : ServicedComponent 
4.{ 
5.private string path; 
6.public CoursesComponent() 
7.{ 
8.} 
9.protected override void Construct(string s) 
10.{ 
11.path = s; 
12.} 
13.private void CreateFile() 
14.{ 
15.string uniqueName = Guid.NewGuid().ToString(); 
16.writer = new StreamWriter(path + @"Courses " + 
17.uniqueName + ".txt"); 
18.}
МАИ, каф 806, Сети ЭВМ 26 
.NET Enterprise Services.Управление временем жизни объекта 
Есть возможность перехватывать события, когда объект становится активным или неактивным 
1.[JustInTimeActivation()] 
2.Class …{ 
3.protected override void Activate() 
4.{ 
5.} 
6.protected override void Deactivate() 
7.{ 
8.} 
9.public void Method2() 
10.{ 
11.// state will not be available after the method completes 
12.ContextUtil.DeactivateOnReturn = true; 
13.} 
14.}
МАИ, каф 806, Сети ЭВМ 27 
.NET Enterprise Services.Управление пулом объектов 
Есть возможность управлять числом объектов, которые постоянно хранятся в памяти 
Позволяет ускорить обработку запросов 
1.[ObjectPooling(true, 100, 1000)] 
2.protected override bool CanBePooled() 
3.{ 
4.if (usageCount > 10) 
5.{ 
6.// the object should not be put back into the pool 
7.return false; 
8.} 
9.else 
10.{ 
11.// returning the object into the pool is OK 
12.return true; 
13.} 
14.}
МАИ, каф 806, Сети ЭВМ 28 
.NET Enterprise Services.Dispose паттерн 
Очень важно правильно управлять высвобождением ресурсов 
1.public class Resource : IDisposable 
2.{ 
3.public Resource() 
4.{ // allocate resource 
5.} 
6.~Resource() 
7.{ // this is called by the garbage collector 
8.Dispose(false); 
9.} 
10.public void Dispose() 
11.{ 
12.// this is called by the programmer 
13.Dispose(true) 
14.} 
15.protected virtual void Dispose(bool disposing) 
16.{ 
17.if (disposing) 
18.{ 
19.// free embedded resources 
20.GC.SuppressFinalize(this); 
21.} 
22.// embedded resources are freed by the garbage collector 
23.// don't access embedded references here 
24.} 
25.}
МАИ, каф 806, Сети ЭВМ 
Ролевая безопасность 
Можно определить конкретных пользователей или набор ролей, которые могут иметь доступ к вашему приложению. 
[assembly: ApplicationAccessControl(true, AccessChecksLevel=AccessChecksLevelOption.ApplicationComponent)] 
Определение ролей 
[assembly: SecurityRole("Attendee", true)]// по умолчанию 
[assembly: SecurityRole("Assistant")] 
[assembly: SecurityRole("Curriculum Manager")] 
29
МАИ, каф 806, Сети ЭВМ 
Проверка прав в приложении 
1.public void SetAllowance(Customer customer, float allowance) 
2.{ 
3.if (allowance > maxNormalAllowance) 
4.{ 
5.if (!ContextUtil.IsCallerInRole("Supervisor")) 
6.throw new UnauthorizedAccessException( 
7."You are not allowed to give that much " + 
8."allowance. Contact the supervisor"); 
9.} 
10.} 
30 
1.[SecurityRole("Attendee")] 
2.[SecurityRole("Assistant")] 
3.public interface ICourseRegistration 
4.{ 
5.[SecureMethod()] 
6.void RegisterCourse(CourseRegistration courseRegistration); 
7.} 
8.[SecurityRole("Curriculum Manager")] 
9.[Transaction(TransactionOption.Required)] 
10.public class CourseControl : ServicedComponent, ICourseRegistration 
11.{ 
12.//...

More Related Content

What's hot

Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5Technopark
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIEkaterina Kuchinskaya
 
FreeRTOS
FreeRTOSFreeRTOS
FreeRTOSquakke
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7Technopark
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Dima Dzuba
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETDev2Dev
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.Igor Shkulipa
 
Traditional relational databases architecture
Traditional relational databases architectureTraditional relational databases architecture
Traditional relational databases architectureDeutscheBank
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETDev2Dev
 

What's hot (20)

Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
 
9 free rtos
9 free rtos9 free rtos
9 free rtos
 
FreeRTOS
FreeRTOSFreeRTOS
FreeRTOS
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
 
Traditional relational databases architecture
Traditional relational databases architectureTraditional relational databases architecture
Traditional relational databases architecture
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 

Similar to МАИ, Сети ЭВМ, Лекция №5

Обзор платформы B4
Обзор платформы B4Обзор платформы B4
Обзор платформы B4Bars Group
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoftKewpaN
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureVadim Novitskiy
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Vladimir Kochetkov
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняLuxoftTraining
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Введение в Microsoft Silverlight 3.0
Введение в Microsoft Silverlight 3.0Введение в Microsoft Silverlight 3.0
Введение в Microsoft Silverlight 3.0akrakovetsky
 
Модульная структура
Модульная структураМодульная структура
Модульная структураDenis Tsvettsih
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...Rinat Shaikhutdinov
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest
 
Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Dima Dzuba
 

Similar to МАИ, Сети ЭВМ, Лекция №5 (20)

Обзор платформы B4
Обзор платформы B4Обзор платформы B4
Обзор платформы B4
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows Azure
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровня
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Введение в Microsoft Silverlight 3.0
Введение в Microsoft Silverlight 3.0Введение в Microsoft Silverlight 3.0
Введение в Microsoft Silverlight 3.0
 
Модульная структура
Модульная структураМодульная структура
Модульная структура
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
 
Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9
 

More from Dima Dzuba

Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14Dima Dzuba
 
Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Dima Dzuba
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation processDima Dzuba
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Dima Dzuba
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
Производительность программных систем
Производительность программных системПроизводительность программных систем
Производительность программных системDima Dzuba
 
Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Dima Dzuba
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2Dima Dzuba
 
МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1Dima Dzuba
 
Решение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных системРешение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных системDima Dzuba
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
Arch intro4sts
Arch intro4stsArch intro4sts
Arch intro4stsDima Dzuba
 
Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10Dima Dzuba
 
Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Dima Dzuba
 
Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7Dima Dzuba
 
Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Dima Dzuba
 
Проектирование программных систем. Занятие 5
Проектирование программных систем. Занятие 5Проектирование программных систем. Занятие 5
Проектирование программных систем. Занятие 5Dima Dzuba
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Dima Dzuba
 
Проектирование программных систем. Занятие 3
Проектирование программных систем. Занятие 3Проектирование программных систем. Занятие 3
Проектирование программных систем. Занятие 3Dima Dzuba
 

More from Dima Dzuba (20)

Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14
 
Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation process
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
Производительность программных систем
Производительность программных системПроизводительность программных систем
Производительность программных систем
 
Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2
 
МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1
 
Решение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных системРешение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных систем
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Arch intro4sts
Arch intro4stsArch intro4sts
Arch intro4sts
 
Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10
 
Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8
 
Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7
 
Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6
 
Проектирование программных систем. Занятие 5
Проектирование программных систем. Занятие 5Проектирование программных систем. Занятие 5
Проектирование программных систем. Занятие 5
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4
 
Проектирование программных систем. Занятие 3
Проектирование программных систем. Занятие 3Проектирование программных систем. Занятие 3
Проектирование программных систем. Занятие 3
 

МАИ, Сети ЭВМ, Лекция №5

  • 1. МАИ, каф 806, Сети ЭВМ ENTERPRISE SERVICES com + 1
  • 2. МАИ, каф 806, Сети ЭВМ 2 .NET Enterprise Services. COM Базовые идеи Component Object Model (COM) создан в 1993 году для упрощения межмодульного взаимодействия и управления временем жизни объектов; Непривязанный к языкам программирования способ описания объектов (компонентов); Включает:  Поддерживает большое число языков программирования;  Автоматическое управление временем жизни объекта через подсчет ссылок на объектIUnknown;  Поддерживает работу с описанием объекта (IDL);  Поддерживает наследование интерфейсов;  Поддерживает позднее связывание;  Поддерживает создание многопоточных приложений;  Поддерживает распределенные транзакций с помощью MTS; Используется в основном только в OS Windows (95/98/NT/2000/2003/XP/Vista/2008/2012/7/8/10/Windows Phone 8); Альтернативными COM технологиями являются CORBA и JavaBeans;
  • 3. МАИ, каф 806, Сети ЭВМ 3 .NET Enterprise Services.COM основы. Программы строятся как набор взаимодействующих COM компонент. Компоненты идентифицируются с помощью идентификаторов GUID (Globally Unique Identifiers). Например, B058D6F9-AC1C-4369-A2C1-CD1DA693EE16; Каждый компонент предоставляет набор интерфейсов, для доступа к своей функциональности; Каждый интерфейс идентифицируется с помощью идентификаторов GUID; Интерфейсы  Наследуются от стандартного интерфейса IUnknown;  IUnknown состоит из методов: •AddRef; •Release; •QueryInterface;  Интерфейс должен удовлетворять свойствам: •Рефлективности (если у интерфейса запросить его же, то он вернет себя); •Симметрии (если интерфейс А доступен из B, тогда и B доступен из A); •Транзитивности(если A доступен из B, B доступен изC, то и А доступен из C); 1.
  • 4. МАИ, каф 806, Сети ЭВМ 4 .NET Enterprise Services. IDL IDL позволяет описывать интерфейсы, типы и структуры данных; IDL может быть конвертирован в TLB файл (type library).Которая может быть использована для компеляции в конкретный язык программирования; Пример 1.import "oaidl.idl"; 2.import "ocidl.idl"; 3.[object, 4.uuid(2FFB4D41-052A-497C-BE43-71B1D09B6360), 5.helpstring(" IMyInterfaceInterface"), 6.pointer_default(unique)] 7.interface IMyInterface: IUnknown 8.{ 9.[helpstring("method DoSomething")] 10.HRESULT DoSomething([in] LPOLESTR word, [out,retval] VARIANT_BOOL *result); 11.}; 12.[ uuid(3FED244E-4367-4C8F-932C-C0DF67BEBAFC), 13.version(1.0), 14.helpstring(“MyClass1.0 Type Library") ] 15.library ATLSPELLCHECKLib 16.{ 17.importlib("stdole32.tlb"); 18.importlib("stdole2.tlb"); 19.[ uuid(3D233E11-3661-4EA5-87C8-ABCFCFEE76BF), helpstring("Мой класс") ] 20.coclass MyClass{ [default] interface IMyInterface; }; 21.};
  • 5. 5 МАИ, каф 806, Сети ЭВМ .NET Enterprise Services. Registry  В Windows Registry (HKEY_CLASSES_ROOT) хранятся ссылки на  Библиотеки типов COM  Классы COM  Интерфейсы COM  После своего создания любое COM приложение должно быть зарегистрировано в Registry  с помощью утилит: • regsvr32.exe (обычные компоненты) • regsvcs.exe (.NET) 1.
  • 6. МАИ, каф 806, Сети ЭВМ 6 .NET Enterprise Services. Простой пример COM+ компонента
  • 7. МАИ, каф 806, Сети ЭВМ 7 .NET Enterprise Services. Простой пример COM+ компонента Выполняется для  COM-классов  COM-интерфейсов  Всей сборки
  • 8. МАИ, каф 806, Сети ЭВМ 8 .NET Enterprise Services.Простой пример COM+ компонента Написание класса-интерфейса 1.usingSystem; 2.usingSystem.Collections.Generic; 3.usingSystem.Text; 4.usingSystem.Runtime.InteropServices; 5.namespace_13_COMServer 6.{ 7.[Guid("39A0CD49-CB4B-46ca-831C-375E50E8DEFE")] 8.publicinterfaceIMyCOMServer 9.{ 10.StringdoSomeAction(); 11.} 12.}
  • 9. МАИ, каф 806, Сети ЭВМ 9 .NET Enterprise Services. Простой пример COM+ компонента Написание класса COMобъекта 1.usingSystem; 2.usingSystem.Collections.Generic; 3.usingSystem.Text; 4.usingSystem.EnterpriseServices; 5.usingSystem.Runtime.InteropServices; 6.namespace_13_COMServer 7.{ 8.[Transaction(TransactionOption.Disabled)] 9.[ClassInterface(ClassInterfaceType.AutoDual)] 10.[Guid("F79A8505-D2AA-4504-8794-6D85498FE0B6")] 11.publicclassMyCOMServerImpl: ServicedComponent,IMyCOMServer 12.{ 13.publicMyCOMServerImpl() : base() 14.{ 15.} 16.publicstringdoSomeAction() 17.{ 18.return"Hello World!"; 19.} 20.} 21.}
  • 10. МАИ, каф 806, Сети ЭВМ 10 .NET Enterprise Services. Простой пример COM+ компонента Устанавливаем свойства сборки 1.usingSystem.Reflection; 2.usingSystem.Runtime.CompilerServices; 3.usingSystem.Runtime.InteropServices; 4.usingSystem.EnterpriseServices; 5.[assembly: AssemblyTitle("013_COMServer")] 6.[assembly: AssemblyDescription("")] 7.[assembly: AssemblyConfiguration("")] 8.[assembly: AssemblyCompany("")] 9.[assembly: AssemblyProduct("013_COMServer")] 10.[assembly: AssemblyCopyright("Copyright © 2007")] 11.[assembly: AssemblyTrademark("")] 12.[assembly: AssemblyCulture("")] 13.[assembly: ComVisible(true)] 14.[assembly: ApplicationActivation(ActivationOption.Library)] 15.[assembly: ApplicationAccessControl(false)] 16.[assembly: Guid("bbbc01b2-5eb5-4309-9d65-182e2b2f10ed")] 17.[assembly: AssemblyVersion("1.0.0.0")] 18.[assembly: AssemblyFileVersion("1.0.0.0")]
  • 11. МАИ, каф 806, Сети ЭВМ 11 .NET Enterprise Services. . Простой пример COM+ компонента Генерирование Strong Name
  • 12. МАИ, каф 806, Сети ЭВМ 12 .NET Enterprise Services. Простой пример COM+ компонента Установка признака видимости сборки Регистрация COM+ с помощью regsvcs.exe
  • 13. МАИ, каф 806, Сети ЭВМ 13 .NET Enterprise Services. Простой пример COM+ компонента
  • 14. МАИ, каф 806, Сети ЭВМ 14 .NET Enterprise Services. Простой пример COM+ компонента Удобный вызывать COM+ компоненты удаленно –PROXY Proxy создается на машине с установленным COM+ объектом через приложение Component Services Proxy -это инсталлятор который генерирует COM+ объект на локальной машине, который вызывает настоящий COM+ объект.
  • 15. МАИ, каф 806, Сети ЭВМ 15 .NET Enterprise Services. Простой пример COM+ компонента Клиент (вариант с Proxy) 1.usingSystem; 2.usingSystem.Collections.Generic; 3.usingSystem.Text; 4.usingSystem.EnterpriseServices; 5.namespace_14_COMClient 6.{ 7.classProgram 8.{ 9.staticvoidMain(string[] args) 10.{ 11._13_COMServer.IMyCOMServersrv = new_13_COMServer.MyCOMServerImpl(); 12.Console.WriteLine(srv.doSomeAction()); 13.Console.ReadLine(); 14.ServicedComponent.DisposeObject((ServicedComponent)srv); 15.} 16.} 17.}
  • 16. МАИ, каф 806, Сети ЭВМ 16 .NET Enterprise Services. Простой пример COM+ компонента Клиент (вариант без Proxy) 1.usingSystem; 2.usingSystem.Collections.Generic; 3.usingSystem.Text; 4.usingSystem.EnterpriseServices; 5.namespace_14_COMClient 6.{ 7.classProgram 8.{ 9.staticvoidMain(string[] args) 10.{ 11.// Получаемтипком-объектаизегоCLSID... 12.Typetype = Type.GetTypeFromCLSID(newGuid("F79A8505-D2AA-4504-8794-6D85498FE0B6"), "localhost"); 13.// Создаемэкземпляр... 14._13_COMServer.IMyCOMServersrv = (_13_COMServer.IMyCOMServer)Activator.CreateInstance(type); 15.Console.WriteLine(srv.doSomeAction()); 16.Console.ReadLine(); 17.ServicedComponent.DisposeObject((ServicedComponent)srv); 18.} 19.} 20.}
  • 17. МАИ, каф 806, Сети ЭВМ 17 .NET Enterprise Services.Поддержка транзакций Атрибут класса  [Transaction(TransactionOption.Required)] Атрибут метода  [AutoComplete] Явное управление  ContextUtil.SetComplete();  ContextUtil.Abort(); 1.
  • 18. МАИ, каф 806, Сети ЭВМ TransactionOption Значение Описание Required Если вызывающий контекст содержит транзакцию, то используется он. Еслинет –то создается новый с транзакцией. RequiresNew Всегда создается новый с транзакцией. Supported Если вызывающий контекст с транзакцией, то выполняется в рамках транзакции. NotSupported Ни когда не участвует в транзакции (если вызван в транзакции, то создаетсяновый контекст без транзакции). Disabled Игнорируетсяесть ли транзакция в вызывающем компоненте или нет. 18
  • 19. МАИ, каф 806, Сети ЭВМ Пример Required, Supported, NotSupported, RequiresNew 19
  • 20. МАИ, каф 806, Сети ЭВМ AutoComplete [AutoComplete] public void AddCourse(Course c) { try { CourseData db = new CourseData(connectionString); db.AddCourse(c); } catch (Exception ex) { // do some event logging // re-throw exception throw; } } 20
  • 21. МАИ, каф 806, Сети ЭВМ Транзакции в .NET using System; using System.Transactions; class TxDemo { static void Main() { using (TransactionScopescope = new TransactionScope( TransactionScopeOption.Required)) { Course c = new Course(); c.Title = ".NET Enterprise Services"; CourseData db = new CourseData(connectionString); db.AddCourse(c); scope.Complete(); } } } 21
  • 22. МАИ, каф 806, Сети ЭВМ Синхронизация Activity –это логический домен, доступ к которому могут иметь только потоки с одним контекстом синхронизации. 22
  • 23. МАИ, каф 806, Сети ЭВМ SynchronizationOption Disabled Контекст синхронизации всегда игнорируется. NotSupported аналогично предыдущему случаю, однако если вызывающий контекст поддерживает синхронизацию, то создается новый без. Required Всегда используется контекст синхронизации. RequiresNew Всегда создается новый контекст синхронизации. SupportedЕсли вызывающий объект поддерживает синхронизацию –то работает в синхронизации, если нет, то без неё. 23
  • 24. МАИ, каф 806, Сети ЭВМ Пример [Synchronization(SynchronizationOption.Required)] [EventTrackingEnabled] public class B : ServicedComponent { public void Sleep() { Console.WriteLine("B.Sleep started"); Thread.Sleep(2000); Console.WriteLine("B.Sleep finished"); } public Guid GetActivityId() { return ContextUtil.ActivityId; } } 24
  • 25. МАИ, каф 806, Сети ЭВМ 25 .NET Enterprise Services. Управление активацией объекта При активации могут передаваться параметры в строке активации 1.[ConstructionEnabled(Default=@"C:temp")] 2.[EventTrackingEnabled] 3.public class CoursesComponent : ServicedComponent 4.{ 5.private string path; 6.public CoursesComponent() 7.{ 8.} 9.protected override void Construct(string s) 10.{ 11.path = s; 12.} 13.private void CreateFile() 14.{ 15.string uniqueName = Guid.NewGuid().ToString(); 16.writer = new StreamWriter(path + @"Courses " + 17.uniqueName + ".txt"); 18.}
  • 26. МАИ, каф 806, Сети ЭВМ 26 .NET Enterprise Services.Управление временем жизни объекта Есть возможность перехватывать события, когда объект становится активным или неактивным 1.[JustInTimeActivation()] 2.Class …{ 3.protected override void Activate() 4.{ 5.} 6.protected override void Deactivate() 7.{ 8.} 9.public void Method2() 10.{ 11.// state will not be available after the method completes 12.ContextUtil.DeactivateOnReturn = true; 13.} 14.}
  • 27. МАИ, каф 806, Сети ЭВМ 27 .NET Enterprise Services.Управление пулом объектов Есть возможность управлять числом объектов, которые постоянно хранятся в памяти Позволяет ускорить обработку запросов 1.[ObjectPooling(true, 100, 1000)] 2.protected override bool CanBePooled() 3.{ 4.if (usageCount > 10) 5.{ 6.// the object should not be put back into the pool 7.return false; 8.} 9.else 10.{ 11.// returning the object into the pool is OK 12.return true; 13.} 14.}
  • 28. МАИ, каф 806, Сети ЭВМ 28 .NET Enterprise Services.Dispose паттерн Очень важно правильно управлять высвобождением ресурсов 1.public class Resource : IDisposable 2.{ 3.public Resource() 4.{ // allocate resource 5.} 6.~Resource() 7.{ // this is called by the garbage collector 8.Dispose(false); 9.} 10.public void Dispose() 11.{ 12.// this is called by the programmer 13.Dispose(true) 14.} 15.protected virtual void Dispose(bool disposing) 16.{ 17.if (disposing) 18.{ 19.// free embedded resources 20.GC.SuppressFinalize(this); 21.} 22.// embedded resources are freed by the garbage collector 23.// don't access embedded references here 24.} 25.}
  • 29. МАИ, каф 806, Сети ЭВМ Ролевая безопасность Можно определить конкретных пользователей или набор ролей, которые могут иметь доступ к вашему приложению. [assembly: ApplicationAccessControl(true, AccessChecksLevel=AccessChecksLevelOption.ApplicationComponent)] Определение ролей [assembly: SecurityRole("Attendee", true)]// по умолчанию [assembly: SecurityRole("Assistant")] [assembly: SecurityRole("Curriculum Manager")] 29
  • 30. МАИ, каф 806, Сети ЭВМ Проверка прав в приложении 1.public void SetAllowance(Customer customer, float allowance) 2.{ 3.if (allowance > maxNormalAllowance) 4.{ 5.if (!ContextUtil.IsCallerInRole("Supervisor")) 6.throw new UnauthorizedAccessException( 7."You are not allowed to give that much " + 8."allowance. Contact the supervisor"); 9.} 10.} 30 1.[SecurityRole("Attendee")] 2.[SecurityRole("Assistant")] 3.public interface ICourseRegistration 4.{ 5.[SecureMethod()] 6.void RegisterCourse(CourseRegistration courseRegistration); 7.} 8.[SecurityRole("Curriculum Manager")] 9.[Transaction(TransactionOption.Required)] 10.public class CourseControl : ServicedComponent, ICourseRegistration 11.{ 12.//...