Побіжне знайомство із середовищем. NET Framework

Середа Microsoft NET Framework є компонентом служб додатків операційної системи Windows Призначенням цього середовища є забезпечення надійних і безпечних засобів розробки та виконання додатків, в яких безліч мов програмування спільно використовують багатий набір загальних бібліотек

Додатки, повязані з середовищем NET Framework, створюються відповідно до стандартних орієнтованим на служби протоколам (SOA) Так, XML дозволяє встановити зєднання з компонентами інших додатків, як орієнтованих на NET, так і інших, або навіть запускаються в блоках Windows

Процеси, створювані з використанням середовища NET Framework, за замовчуванням призначені для захисту цілісності операційного середовища, незалежно від того, завершиться процес помилкою або спробує виконати неприпустиму операцію

Середа NET Framework мала стати реалізацією раніше невиконаних обіцянок компанії Microsoft щодо масштабованості і збільшення продуктивності Windows, хоча у версії 20 продуктивність залишається обмеженою інтересами можливості взаємодії мереж та інтеграції між додатками Microsoft У даній версії було взято за мету досягнення продуктивності таких існуючих інтерфейсів програмування, як СОМ і OLE DB В цілому цей план був виконаний і навіть перевиконаний У майбутніх версіях можна небезпідставно очікувати додаткових значних проривів в продуктивності

Середа NET Framework доступна в операційних системах Windows 2000, Windows 2003, Windows ХР, Windows РЄ та Windows Vista також вона буде доступна у всіх майбутніх версіях цієї операційної системи Гнучка система підтримки версій дозволяє різним збірок базових бібліотек класів NET Framework бути доступними різним додаткам, одночасно запущеним на одному компютері Основним завданням тут було подолання жорсткості в попередніх моделях реєстрації бібліотек dll, до болю знайомою багатьом розробникам

Збірки

Компоненти NET, звані збірками, є базовими одиницями при компіляції Збірки використовують строгі угоди про імена, призначені для унікальної ідентифікації версій Вони можуть розміщуватися в самому додатку, а також в ієрархії середовища системи Windows, відомої як глобальний кеш складок (GAC) За замовчуванням загальні бібліотеки класів середовища NET Framework розташовані саме в цьому кеші Незалежно від мови програмування всі програми NET мають доступ до одних і тих же загальним бібліотекам у GAC

Процес компіляції додатків NET розділений на два етапи Збірки зберігаються на проміжному мовою MSIL (Microsoft Intermediate Language) На якому б мовою NET програміст ні написав програму, вона буде скомпільована в MSIL і збережена в збірці В цілому генерований код MSIL ідентичний, незалежно від того, якою мовою спочатку була написана програма

Під час виконання збірки MSIL перетворюються в машинні інструкції компілятором JIT (Just In Time) інтерпретатора CLR і завантажуються в память Інтерпретатор CLR знає, коли саме MSEL потрібно перетворити в машинний код, прагнучи переміщати в память команди тільки в міру необхідності і видаляючи їх з памяті, коли потреба в них відпала Останню операцію часто називають прибиранням сміття

Всі типи перевіряються компілятором JIT під час виконання програми Решта питань захисту, такі як сертифікати, підписи, політики тощо, також вирішуються під час виконання програми На цьому заснована магія переносимості середовища NET Framework Якщо операційна система розуміє MSIL і файлів дозволено запускатися на локальному компютері, то додаток буде виконано

Основними компонентами середовища NET Framework є типи Типом може бути значення або посилання Типи значень володіють наступними характеристиками:

■ включають примітиви, такі як integer, char або boolean

■ обслуговуються в стеку виконання програми

■ не можуть містити поля, методи або властивості

■ однозначно призначені змінним

Типи посилань мають такі характеристики:

І містять обєкти, такі як класи, інтерфейси, делегування, масиви та перерахування

■ обслуговуються в купі керованих обєктів, відокремленої від стека виконання

■ можуть містити поля, методи і властивості

■ спільно використовуються всіма змінними, призначеними даному типу

Використовуючи інтеграцію CLR, розробник може розширити коло примітивів і використовувати поля, методи і властивості При цьому тип значення в примітиві перетвориться в тип посилання

Тільки типи, відповідні специфікації CTS (Common Type System) середовища NET, можуть завантажуватися і оброблятися інтерпретатором CLR Ці типи прийнято називати керованими У відповідності з архітектурою середовища NET Framework всі мови програмування, узгоджуються з CTS, повинні генерувати ідентичні керовані типи На практиці існують деякі відмінності між різними мовами NET Середа NET Framework реалізує загальномовне специфікацію CLS (Common Language Specification), щоб усунути відмінності між мовами програмування За задоволення вимог специфікації CLS несуть спільну відповідальність і програміст, і компілятор Тільки якщо код є CLS-сумісним, згенерований код MSIL буде доступний всім іншим додаткам, які також генерують керовані типи Слід зазначити, що для запуску в інтерпретаторі CLR необхідними компонентами є CTS-і (не обовязково) CLS-сумісність CLS-сумісність всього лише гарантує те, що дана збірка може бути коректно використана компонентами, написаними на інших мовах програмування До того ж CLS-сумісними повинні бути тільки типи і члени компонентів, пропоновані для загального використання

Специфікацію CTS, включаючи CLS, можна знайти в документації NET Frame-Рада work SDK, що входить до складу документації Visual Studio 2005, а також на Web-

сайті компанії Microsoft

Основною одиницею компіляції, розподілу, повторного використання, відстеження версій і захисту є складання У терміногогіі обєктно-орієнтованого програмування (ООП) збірку можна розглядати як кордони інкапсуляції, а середу NET Framework є обєктно-орієнтованою Збірка містить виконуваний програмний код у вигляді MSIL і всі метадані ресурсів для одного або декількох типів Велика частина метаданих містить інформацію про типи, що містяться в збірці Кожна збірка також містить маніфест метаданих Цей маніфест містить дружнє імя і атрибути, які узагальнюють суворе імя збірки, призначене їй при створенні Маніфест також містить всі посилання збірки, тобто список всіх зборок, залежних від неї На підставі маніфесту збірки компілятор JIT може в міру необхідності ефективно перетворити код MSIL в машинні команди

Домени додатків

Основною одиницею простору памяті запущеного додатку NET є домен програми Теоретично додаток NET може відкривати збірки або під час компіляції, або під час роботи програми (Приблизно аналогічно раннього і пізнього звязування ActiveX) На практиці ж без твердого розуміння багаторівневих методів підстановок, використовуваних для перенесення збірок в домен програми, такий режим роботи може здатися дещо дивним

У маніфесті збірки визначається склад збірок, що включаються компілятором JTT в конкретний домен Незважаючи на те що один процес може використовувати декілька доменів додатків, останні є областю визначення типу Тип не може посилатися на код або ресурси поза свого домену програми, якщо, звичайно, не дотримуються певні правила віддаленого протоколу, які гарантують цілісність кожного процесу

Відстань – це кумулятивний механізм взаємодії процесів Вона використовує механізм прослуховування на сервері, щоб дозволити клієнтам створювати посилання на обєкти, які існують десь поза домену додатку клієнта

Слід зауважити, що домен збірки додатку повинен бути отриманий з метаданих маніфесту, перш ніж збірка з домену іншої програми зможе до нього звернутися Це справедливо незалежно від того, запущені Чи домени додатків в одному процесі, в різних процесах однієї операційної системи або взагалі на різних компютерах, що знаходяться у віддалених один від одного регіонах По суті, це вимагає, щоб кожна з зборок, яка повинна взаємодіяти з іншими доменами додатків, компілювати в код MSIL з посиланнями на збірки, до яких вона звертатиметься до інших доменах У деяких випадках віддалений доступ між доменами зборок потрібна з міркувань продуктивності або безпеки, але наявність строгих правил є ознакою того, що використання XML найчастіше є більш гнучким і універсальним методом взаємодії доменів різних додатків, ніж спроби спільного використання безпечних типів різними доменами

Віддаленість можна розглядати як версію NET технології DCOM Розрив-Увага ботчиков можуть дійсно захотіти скористатися цими можливостями, щоб уникнути необхідності включення явних посилань в маніфестах на користувача типи, визначені в збірках рівня програми SQL Server Тільки в дуже рідкісних випадках віддаленість використовується для створення посилань на типи всередині процесу SQL Server, так як в цьому випадку рішення стає занадто складним і за визначенням розкриває SQL Server Такий підхід навряд чи зможе виправдати повязані з ним ризики і зусилля програміста

Додаток, що містить тільки керовані типи та використовує середовище NET Framework, прийнято називати керованим кодом Керований код відрізняється від некерованого тим, що середовище виконання CLR абстрагована від апаратного забезпечення та операційної системи Програміст може обійти цей захищений режим виконання програми, особливо враховуючи накопичився обсяг звичайного коду, який було б непрактично переписувати негайно (або коли-небудь) в керований код NET Наприклад, на некеровані компоненти СОМ можна посилатися, використовуючи систему, запропоновану складанням периферійного інтерфейсу адаптера (PIA) Також можна виконати функції будь відмінної від СОМ бібліотеки, використовуючи механізм ініціації платформи

Програміст на C + + (і, до певного рівня, на С #) може виділяти память і використовувати покажчики для посилань на область памяті На жаль, ця можливість обходу вимог безпеки типів прочиняє лазівки для створення додатків, які зможуть зашкодити операційну середу Хоча б тільки з цієї причини одним з найбільш важливих дій у забезпеченні захисту SQL Server є побудова і розгортання на сервері баз даних лише CLS-сумісних збірок

Додаткова Додаткову інформацію про збірки периферійних інтерфейсів Адапті-інформація рів ви знайдете в главі 30

Цілком очевидно, що програмний код NET може існувати окремо від програми, яка його використовує Ці реалії відкривають гарну можливість висвітлити новий тип захисту, вбудований в CLR, – безпечний доступ до коду (CAS) З AS гарантує, що весь керований код для доступу до типів використовує безпечні методи Подібно CLS, перевірка безпеки типів покладається на компілятор Водночас написання прягодного до перевірки З AS-сумісного коду ставиться в обовязок програмісту З AS реалізує синтаксис захисту розробник може декларативно встановлювати властивості дозволів або імперативно створювати обєкти дозволів

У моделі CAS, як і очікувалося, кожна збірка визначає необхідні дозволи у своєму маніфесті Так як маніфест збірки є точкою входу в збірку в процесі виконання, перед виконанням будь-якого програмного коду збірки перевіряється наявність відповідних дозволів Аналогічно, бібліотеки класів системи безпеки перевіряють, чи має викликає процес дозвіл на їх використання Система CAS виходить за рамки традиційної моделі аутентифікації користувача і його дозволів В системі CAS код повинен переконатися, що інші його фрагменти мають право на взаємодію

Дуже важливо, щоб програміст при створенні програми враховував вимоги CAS, в іншому випадку це може привести до збою роботи сервера На щастя, інтеграція CLR в SQL Server перевіряє, чи є запускається в ньому код CAS-сумісним Середа виконання CLR в SQL Server надає розробнику часткові класи, які за лаштунками комбінуються з іншим кодом для створення компонентів баз даних CLR У частині класу, якій користувач не може маніпулювати, містяться деякі важливі CAS-сумісні інструкції захисту

Коли JIT компілює програмний код в SQL Server, він перевіряє відповідність вимогам З AS, безпека типів, а також дозволи SQL Server Коли програмується NET-компонент бази даних, він може маркуватися як SAFE, EXTERNAL ACCESS або UNSAFE Це визначає використовувані обмеження моделі програмування, а також оголошення та імперативи З AS, які будуть використані цієї складанням

Для побудови CLS-сумісних збірок розробник повинен твердо дотримуватися правил, викладених у документі Common Language Infrastructure, Partition I: Concepts and Architecture, який можна знайти в папці Tool Development Guide, яка встановлюється разом з Microsoft NET Framework SDK Навіть якщо розробник строго слід специфікації, CLS-сумісного компілятору також необхідно гарантувати сумісність збірки з CLS Всі компілятори пакета Visual Studio 2005 гарантують таку сумісність CLS-сумісність повинна розглядатися як обовязкова вимога для компонентів інтеграції CLR, хоча б тому, що немає іншого способу задіяти мови, яким належить працювати з конкретним обєктом бази даних В якості одного з варіантів практично безболісного забезпечення CLS-сумісності можна розглянути створення інтегрованих в базу даних обєктів CLR за допомогою мови VBNET в середовищі Visual Studio 2005

Чому VBNET є кращим вибором для забезпечення CLS-сумісності Адже компілятори C + + і C # в Visual Studio 2005 також здатні створювати CLS-сумісний код, так само як і компілятор VB Розробникам, слабо знайомим з програмуванням в середовищі NET Framework, VBNET надасть найбільшу допомогу в написанні CLS-сумісного програмного коду VBNET по праву вважається самим простим у використанні мовою сімейства NET, призначеним для використання в середовищі швидкої розробки додатків (RAD) Образно кажучи, VBNET пропонує тільки CLS-сумісні інструкції Природно, вибір виключно за вами і якщо ви добре знайомі з яким-небудь іншим керованим мовою, природно, краще використовувати його Якщо ж ви тільки починаєте програмувати в середовищі NET Framework або працюєте переважно в середовищі швидкої розробки додатків, серйозно подумайте про розробку компонентів бази даних на мові VBNET

Що робить Visual Studio кращим вибором для компіляції додатків Відповідь полягає в наявності безлічі додаткових функцій, які пропонує ця програма Такий же компілятор VBNET входить до складу NET Framework SDK, так що технічно можливо створювати програмний код навіть у простому текстовому редакторі, такому як Notepad, а потім скомпілювати його в командному рядку і отримати повністю CLS-сумісні файли MSEL Деякі навіть можуть аргументувати цей підхід тим, що перш ніж переходити до такого елегантному інструменту, як Visual Studio, потрібно зрозуміти, як все працює на самому нижньому рівні

Може бути, у вищеописаному підході і є розумне зерно з точки зору навчального процесу, але особисто я вважаю, що немає ніякого сенсу боротися з неозброєним спеціальними засобами текстовим редактором або компілятором командного рядка Максимальну користь і якість програмного коду ви отримаєте, використовуючи Visual Studio Може, ви відчуєте більший контакт з мовою програмування, використовуючи безпосередньо SDK, але практично напевно ті, хто відразу повязав свою долю з Visual Studio, розгорнуть свій перший успішний NET-компонент бази даних набагато раніше тих, хто почав з SDK Для більшості початківців програмістів знайомства з основними концепціями середовища NET більш ніж достатньо, і абсолютно не потрібно створювати собі зайві складності, звязуючись з SDK Як ви незабаром побачите, засоби Visual Studio 2005 самі доведуть, що ця програма є найкращим вибором Перед тим як більш уважно поглянути на інструменти, використовувані для створення типів інтеграції CLR, подивимося, якими ж можуть бути ці типи

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*