Санкт-Петербургский государственный университет
Опубликован: 20.12.2011 | Доступ: свободный | Студентов: 1213 / 54 | Оценка: 3.87 / 4.00 | Длительность: 13:43:00
Лекция 5:

Базовые технологии, использованные для реализации Microsoft Windows Azure

< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Аннотация: В данной лекции рассмотрены следующие вопросы: архитектура .NET и сервисов .NET как основы реализации Windows Azure.

Цель лекции: Ознакомление с принципами и технологией (.NET), используемой для реализации Microsoft Windows Azure.

Презентацию к данной лекции Вы можете скачать здесь.

4.1. Введение

Данная лекция знакомит с платформой .NET – базой для реализации Windows Azure. Рассмотрены Web-сервисы .NET, на которых базируется архитектура и реализация Azure.

Реализация платформы Windows Azure базируется на платформе .NET – платформе надежного и безопасного многоязыкового программирования.

В текстах и презентациях данной и последующих лекций использованы материалы презентаций [1] коллег из Института прикладных наук Верхней Австрии, за что автор выражает им глубокую благодарность.

4.2. Обзор архитектуры .NET

Windows Azure реализована на базе .NET.

.NET – платформа надежного и безопасного многоязыкового программирования.

Основана на единой для всех языков инфраструктуре (CLI), общей системе типов (CTS), общей системе поддержки выполнения (CLR).

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

Исполнение программы в CLR реализовано как последовательность вызовов методов и just-in-time (динамическая) компиляция каждого метода в native-код при первом вызове, с последующими вызовами native-кода.

Метаданные могут быть аннотированы атрибутами, как встроенными, так и пользовательскими.

На использовании метаданных основан динамический контроль типов и безопасности, выполняемый CLR.

4.3. Основные идеи и принципы .NET

Основные идеи и принципы .NET следующие. Это компиляция с любого языка в промежуточный двоичный код MSIL (CIL) – постфиксную форму представления программ; генерация компилятором так называемых метаданных – информации о типах,

определяемых и используемых в программном модуле для .NET. Промежуточный код, метаданные, плюс так называемый манифест (список содержимого двоичного кода)

составляют сборку (assembly) – логическую единицу представления двоичного кода в .NET. Во время выполнения программы, при первом вызове каждого метода, его промежуточный код компилируется специальным компилятором (just-in-time, или JIT, компилятором) в платформно-зависимый (native) код аппаратной платформы (машины), на которой исполняется программа. Де-факто стандартом для представления конфигурационной информации и передачи данных серез сеть в .NET является XML.

4.4. Преимущества подхода .NET

Преимуществом подхода .NET является независимость двоичного кода (CIL) от конкретной апппаратной платформы. Также .NET выполняет код в особом режиме – managed execution, в котором гарантируется полный контроль типов и безопасности, что обеспечивает надежность и безопасность программ, в отличие от использования более старых языков и платформ, например, Си.

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

Повышенные требования к безопасности – еще одна характерная черта .NET. Наконец, .NET имеет очень удобные и современные механизмы поддержки Web-программирования.

4.5. Архитектура .NET Framework

На рис. 4.1 приведена архитектура базовой библиотеки классов (BCL) .NET. Их использование ясно из их названий. Весьма важно, что все эти классы могут быть использованы при программировании на любом языке .NETC#, Visual Basic, Managed C++ и др.

Наиболее важны для данного курса пространства имен System.Web – поддержка Web-сервисов – и System.Securityподдержка установки, проверки и конфигурирования полномочий безопасности сборок.

Классы .NET Framework

Рис. 4.1. Классы .NET Framework

4.6. Общая система типов .NET

Общая система типов .NET (CTS) – весьма удачная унификация систем типов данных современных языков программирования. Подчеркнем, что такая унификация просто необходима в .NET для поддержки многоязыкового программирования (CLR должна "понимать" типы каждого языка одинаково.

Различаются следующие разновидности типов в CTS.

Типы-значения и типы-ссылки – две основных разновидности типов, воплощающие два различных подхода к представлению значений и объектов – контейнерный и ссылочный.

Простые типы (int, double, unsigned int, native int и др.), разумеется, относятся к типам-значениям.

Структуры, что весьма полезно, также относятся к типам-значениям, а не к объектам. Это позволяет описать в них собственные методы. Единственное, чего нет в структурах, по сравнению с классами, - это наследования. Структуры размещаются в стеке. Объекты (принадлежащие некоторым классам) – в куче.

Указатели (managed pointers) - это разновидность указателей, на которой базируются проверки типов и безопасности. Управляемый указатель в .NET содержит ссылку на тип объекта (на метаданные), благодаря чему тип и атрибуты любого объекта можно проверить во время выполнения.

Классы имеют обычный смысл, как в других системах ООП.

Интерфейсы – также стандартная концепция для современных яззыков ООПJava, C#, VB и др. Интерфейс – совокупность заголовков методов, реализуемых некоторым классом.

Делегаты и события– типы данных для обработки событий. Тип делегата описывает типовую структуру заголовка обработчика события, представленного в виде callback-метода. При описании события указывается конкретный тип делегата.

4.7. Язык C#: Определение классов

Язык C# разработан специально для платформы .NET, хотя не является обязательным и единственным для этой платформы (в отличие от Java). Классы в C# определяются традиционным для ООП образом – как набор полей и методов. В дополнение к другим языкам, определение класса может также содержать свойства (обобщенные поля с операциями get и set); индексаторы; события; делегаты. Пример класса:

public class Person :IPersonAge
{
   private int YOB;
   public Person() 
   {
   }
   public int YearOfBirth
   {
      get { return YOB; }; 
      set { YOB = value; };
   } 
   public int GetAgeToday()
   { 
      return Today()-
             YearOfBirth 
   }; 
}

4.8. Web-сервисы в .NET

Концепция Web-сервиса в .NET поддерживает сервисы в виде классов, интерфейс которых доступен через Web, соблюдающие ряд стандартов (WSDL, SOAP, XML), основанные на библиотеке классов .NET Framework.

На рис. 4.2 приведена структура распределенного Web-приложения.

Структура распределенного Web-приложения

Рис. 4.2. Структура распределенного Web-приложения

Приложение состоит из клиентской и серверной частей. Web-сервис должен удовлетворять определенному контракту (реализовывать определенный интерфейс).

Инфраструктура Web-сервисов представлена на рис. 4.3.

Инфраструктура Web-сервиса в .NET

Рис. 4.3. Инфраструктура Web-сервиса в .NET

Web-сервис может обрабатывать несколько видов запросов Web-клиентов. При обнаружении (открытии) сервиса клиент передает запрос вида vsdisco, в ответ на который сервисы открытия (UDDI) сообщают о месте расположения Web-сервиса. В ответ на другой запросWSDL – сервис сообщает клиенту структуру своего интерфейса в формате XML с соблюдением стандарта WSDL (Web Service Description Language). В ответ на запрос asmx Web-сервис посылает свой файл реализации в формате XML.

На рис. 4.4 приведен простой пример кода Web-сервиса, выполняющего вычитание двух чисел и выдающего результат, на рис. 4.5 представлена структура WSDL-спецификации Web-сервисов, состоящей из сервисов, портов и сообщений.

Простой пример кода Web-сервиса .NET

Рис. 4.4. Простой пример кода Web-сервиса .NET

Пример WSDL-описания Web-сервиса:

<definitions name="serviceName">
 <import namespace="http://namespacePath"
         location="http://path/fileName.wsdl">
 <portType name="serviceNamePortType">
   <operation name="opName">
      <input message="msgNameInput" />
      <output message="msgNameOutput" />
   </operation>
 </portType>
 <binding name="serviceNameSoapBinding">
    <soap:operation soapAction="http://..." />
 </binding>
 <service name="serviceName">
   <port name="serviceNamePort" binding="bindingName">
      <soap:address location="http://..." />
   </port>
 </service>
</definitions>

Использование Web-сервисов основано на следующих принципах. Полностью разделена логика размещения и вызова: сервис представлен в виде пары файлов: .aspx и .aspx.cs (или .aspx.vb). Файлы .aspx предназначены для дизайнеров, файлы .aspx.cs - для программистов. Таким образом достигается легкость сопровождения приложения.

Фрагмент кода сервиса:

<%@ Import Namespace="MathServiceSpace" %>
            <script language="C#" runat="server">
           public void Submit_Click(Object S, EventArgs E) {
          service.Add(operand1, operand2);
            ...
           </script>
                 ...
       <input OnServerClick="Submit_Click" runat="server" ...>

< Лекция 4 || Лекция 5: 123 || Лекция 6 >