Опубликован: 11.05.2007 | Доступ: свободный | Студентов: 1698 / 235 | Оценка: 4.36 / 4.25 | Длительность: 16:06:00
Лекция 10:

Промежуточная среда .NET Remoting

Класс Utils содержит вспомогательные статические методы для разбора URL.

public static class Utils    
{
    // метод выделяет из URL идентификатор объекта и трубы
    public static string ParseUrl(string url, string channelName, 
         out string objectUri)
     {
      objectUri = null;
            
       Regex re = new Regex(@"^" + channelName + @"\:\/\/(.+)$");                 
       Match m = re.Match(url); 
       if (!m.Success) return null;
                
        string sinkUri =  m.Groups[1].Value;
        Utils.ParseUrl(url, out objectUri);            
        return sinkUri;
     }        

    // метод выделяет из URL идентификатор объекта и путь к очереди MSMQ
     public static string ParseUrl(string url, out string objectUri)
     {
         string queuePath = null;
         objectUri = null;
           
         Regex r = new Regex(@"^(.*)(\\|\/)(.+)$"); 
         Match m = r.Match(url); 

         if (m.Success)
         {
             objectUri = m.Groups[3].Value;
             queuePath = m.Groups[1].Value;
         }
         else
         {
             throw new Exception("Не найден идентификатор объекта в " + url);
         }            
         return queuePath;
     }
 } // Seva.Remoting.MsmqChannel.Utils    
} // Seva.Remoting.MsmqChannel
// Файл SevaRemotingMsmq.cs
Листинг 8.6.

Для компиляции сборки с классом канала можно использовать make файл следующего содержания.

makefile : SevaRemotingMsmq.dll
common = SevaRemotingMsmq.cs SevaMsmq.cs

SevaRemotingMsmq.dll: $(common)
    csc /out:SevaRemotingMsmq.dll /t:library $(common)

Для использования созданного канала необходимо описать его в файле конфигурации, например, указав его полное имя в разделе <channel>.

<configuration>
   <system.runtime.remoting>
      <application>
         <client>
            <wellknown 
               type="RemoteService.RemoteServiceOneWay, RemoteService"
               url="msmq://.\Private$\remoting_queue\service" />
         </client>
         <channels>
           <channel 
             type="Seva.Remoting.MsmqChannel.MsmqChannelSender, SevaRemotingMsmq"/>
         </channels>
      </application>
   </system.runtime.remoting>
</configuration>

Пример файла конфигурации сервера.

<configuration>
    <system.runtime.remoting>
        <application name="JobServer">
            <service>
               <wellknown mode="SingleCall"
                 type="RemoteService.RemoteServiceOneWay, RemoteService"
                 objectUri="service" />
           </service>
           <channels>
           <channel 
             type="Seva.Remoting.MsmqChannel.MsmqChannelReceiver, SevaRemotingMsmq"
             queue = ".\Private$\remoting_queue"/>
           </channels>
        </application>
    </system.runtime.remoting>
</configuration>

Как видно из приведенного примера, среда .NET Remoting имеет уникальные возможности по модификации своей структуры разработчиком. Но даже в рассмотренном простейшем случае такие изменения требуют как минимум глубокого понимания структуры .NET Remoting.

8.7. Выводы по использованию .NET Remoting

Отличительной особенностью среды Remoting является возможность отделить объекты распределенной системы от способа передачи сообщений удаленного вызова. Одно и тоже распределенное приложение может работать с различными каналами передачи данных и способами форматирования, включая локальный канал IpсChannel. Для смены канала достаточно изменить только файлы конфигурации, используемые на клиентах и серверах системы. Однако, при необходимости использования механизмов безопасности на уровне промежуточной среды это преимущество исчезает – поскольку выбор каналов связи ограничен возможностями IIS.

Рассмотрим среду .NET Remoting с точки зрения требований к распределенным системам. При этом следует рассмотреть два типичных случая использования среды Remoting – как веб службы (далее – Remoting-Soap) и с использованием бинарного форматирования (далее – Remoting-Binary).

  1. Открытость. Среда Remoting-Binary может быть использована только в пределах распределенного приложения, использующего CLI, причем для удобства работы нужно, чтобы клиент имел доступ к сборке с классом удаленного объекта. Среда Remoting Soap является открытой и гетерогенной, основанной на общепринятых стандартах SOAP и WSDL.
  2. Масштабируемость. Приложение, использующее .NET Remoting, являются плохо масштабируемым, если используются активируемые клиентом объекты. Для объектов же единственного вызова существует возможность организовать балансировку нагрузок – при ее поддержке сетевой инфраструктурой или при использовании нестандартного посредника.
  3. Поддержание логической целостности данных. Среда Remoting не содержит штатных средств поддержки распределенных транзакций.
  4. Устойчивость. Среда Remoting не содержит средств повышения устойчивости системы, но для объектов единственного вызова ее можно организовать на основе сетевой инфраструктуры или изменениями в стандартных каналах или посредниках.
  5. Безопасность. Remoting Soap может использовать механизмы безопасности IIS. При использовании вне IIS среда Remoting не предоставляет каких-либо встроенных средств обеспечения безопасности, но может использоваться поверх безопасного транспортного протокола при использовании VPN. Кроме того, при создании нестандартного канала Remoting может работать с другими безопасными транспортами, такими как MSMQ.
  6. Эффективность (в узком понимании термина). По имеющимся оценкам, Remoting Binary является наиболее быстродействующей промежуточной средой из всех рассмотренных в курсе.

Среда Remoting имеет гибкую архитектуру, позволяющую при необходимости осуществлять полный контроль за процессом удаленного вызова. Однако, полный контроль за реализацией промежуточный среды, вероятно, важен для достаточно небольшого числа распределенных приложений. Для большей же их части более интересным представляется, например, поддержка отсутствующих в .NET Remoting распределенных транзакций. С другой стороны, при использовании совместно с IIS среда Remoting не имеет заметных преимуществ перед веб службами, причем для веб служб на основе .NET Remoting нет аналогов WSE. Несомненное преимущество использования .NET Remoting вместе с IIS таким образом заключается в возможности быстрого перехода от веб служб HTTP к, например, локальному взаимодействию на основе канала IpcChannel. Для этого достаточно изменить только файлы конфигурации, используемые на клиента и сервере, и заменить IIS на программу, являющуюся сервером .NET Remoting. Вероятным применение Remoting может быть так же высокоскоростной обмен данными в LAN на основе TCP и двоичного форматирования, а также демонстрация реализации удаленного вызова в учебных целях. Возможным доводом в пользу .NET Remoting так же может являться наличие поддержки этой среды в сторонних реализациях CLI.