Welcome to Azure. Full Trust и другое гикье!

Ехали медведи
На велосипеде.

А за ними кот
Задом наперёд.

А за ним комарики
На воздушном шарике.

А за ними раки
На хромой собаке.

(с)Корней Чуковский


Мы достаточном ного раз говорили о том, что на ажуре можна запускать разного рода приложения — такие как анменеджед код (с++), так и код с других платформ — например Руби, PHP, и т.д.

Включение Full Trust приложений
Каждый раз,когда приложение запускается на Вашей системе — они все запускаются с определенный уровнем доверия Вашей системы — к Вашему приложению. Чем меньше система доверяет Вашему приложению — тем меньше доступ к ресурсам системы есть у Вашего приложения. Когда Вы разрабатываете Ваше приложение — в идеале оно должно запускаться с самым маленьким уровнем доверия Вашей системы к Вашему приложению. Тоесть, чем меньше доверия необходимо вашему приложению от системы — тем лучше, потому как это уменьшает возможный вред который может нанести вашей системе приложение если кто нибудь перехватит контроль над вашим приложением. Ваше приложение должно запускаться в полном доверии тока если нету другого выхода ( допустим лезть в реестр, или системные папки ).

Иногда все же , Вашему приложению необходимо запускаться при полном доверии — допустим когда вы используете разные библиотеки которые это требуют, или же используете анменеджет код, или ком библиотеки. Вообщем как видите случаев когда вы обязанный использовать full trust достаточно часты, потому разработчики Ажуо оставили нам такую возможность. Вообщем то, ее даже не то чтобы оставили, ее включили по умолчанию. Потому, если полное доверие со стороны системы к вашему приложению не нужно — смело выключайте нафиг эту фичу — береженого Бог бережет:)
Как я люблю повторяться, способов включения — выключения любой фичи в Ажуре — две:
1. Через юай — метод блондинки
2. Через ХМЛ — гик метод:)

Я все пытаюсь делать блондинкой, ибо в душе у меня она живет. Для того чтобы отключить эту возможность, стоит только тыкнуть на роль и в настройках переставить галочку с Full Trust на Windows Azure partial trust. По гиковски — это открыть настройки фала конфигурации и поставить параметр под названием enableNativeCodeExecution в значение false.
Вот так приблизительно выглядит файл настройки роли с выключенным Full Trust.

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="WindowsAzureProject2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="TestRole" enableNativeCodeExecution="false">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
  </WebRole>
</ServiceDefinition>

FastCGI в Windows Azure

Интерфейс FastCGI — клиент-серверный протокол взаимодействия вебсервера и приложения, дальнейшее развитие технологии CGI. По сравнению с CGI является более производительным и безопасным.

(c) Wikipedia

Приближаемся к самому страшному для .Net разработчика — FastCGI.Это такой модуль для IIS который в двух словах позволяет нам крутить на IIS PHP сайты:) Так что , сейчас мы с Вами окунемся в мир пхп, и запустим наше приложение на Ажуре! (сарказм).

Для того чтобы начать разработку своего первого приложения на пхп для ажур, вначале нам стоит настроить среду разработки над которой мы будем издеваться:)

Итак, включить поддержку CGI для IIS — это как в носу поковыряться. Просто через включение — выключение фич Windows повторяем картинку:

Самое главное в том что мы с вами только что сделали это — CGI.
Ну че, ныряем?:)
Для начала давайте добавим в наше решение новую веб роль типа CGI Role. Обратите внимание, что новый проект содержит в себе однозначно меньше файлов — зато целый два конфигурационных файла!:)

Один из них — Web.config — стандартный веб конфиг, даже остонавливаться лениво.
Следубщий же — файл настройки cgi роли — Web.roleconfig.
Вот в него нам то и надо залезть, для начала ессно!

<?xml version="1.0"?>

<configuration>
  <system.webServer>
    <fastCgi>
      <!-- Set the "Enable Full Trust" property to true on the corresponding 
           Web Role in the Cloud Service project.
      -->

      <!-- Define the fastCgi application here. The application must be located
           under the role root folder or subfolder. The handler is defined in 
           the Web.config file. 

           Ensure that all of the handler binaries have their "Build Action" Solution 
           Explorer file property set to "Content".
           -->
  
      <application fullPath="%RoleRoot%\approot\cgi-handler.exe" />
    
    </fastCgi>
  </system.webServer>

</configuration>

тут мы просто обязанны задать путь к нашему интерпретатору. При чем, как и файл web.roleConfig так и интерпретатор должны иметь билд тип Content для того чтобы .Нет компилятор с ними ничего не делал.

Дальше лезем в web.config. Тут мы должны настроить отработчик который будет разбирать запросы на php файлы.


<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
        <machineKey decryption="AES" decryptionKey="F7FA540B4DFD82E5BB196B95D15FF81FED5EA9B246166A82A0A8963220277E77" validation="SHA1" validationKey="ED5EA9B246166A82A0A8963220277E776A5776569DE62168764FF0DCE537184F0535D5D9AD66DEDCED5EA9B246166A82A0A8963220277E776A57765697DC1ABF" />
  </system.web>

  <system.webServer>
    <defaultDocument>
      <files>
        <add value="index.php" />
      </files>
    </defaultDocument>
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <!-- Define your fastCgi handler here. The scriptProcessor value should map to the 
             application's fullpath and arguments values in the Web.roleconfig file.
        -->
        <add name="FastGGI Handler" verb="*" path="*.php" scriptProcessor="%RoleRoot%\approot\cgi-handler.exe" modules="FastCgiModule" resourceType="Unspecified" />
        
    </handlers>
  </system.webServer>
</configuration>

Теперь дело за малым — создать php файл, и сделать так чтобы он запустился:) В моем случае я запускал вот такое чудо:

<html>
       <head>
             <title>PHP in Azure</title>
       </head>
       <body>
              <?php echo '<p>Бивис, итиже - пасатижи, я пишу на PHP! Зачем???!!!</p>'; ?> <br />
       </body>
</html>

Да, кстати чтобі роль CGI запустиласть — наше приложение должно крутиться в FullTrust.
Об остальном писать безсмысленно, потому как делается все практически так же как и на десктоп приложении — запуск p/invoke и запуск externel приложений. Но возможность есть:)

2 комментария на “Welcome to Azure. Full Trust и другое гикье!

  1. Уведомление: Некоторые интересные ссылки (Март) | Александр Богатырев: сфера

  2. Уведомление: Ежемесячный дайджест технических материалов. | Тверской MCP-Клуб

Оставьте комментарий