Как построить ведущее приложение

Этот раздел относится к технологии прежних версий, которая сохраняется для обеспечения обратной совместимости с существующими приложениями и не рекомендуется для разработки новых приложений. Сейчас распределенные приложения следует создавать с помощью  Windows Communication Foundation (WCF).

Сам по себе класс RemotableType, определенный в разделе Как построить тип, поддерживающий удаленное взаимодействие, не представляет большой ценности. Чтобы объекты в других доменах приложений могли удаленно создавать экземпляры этого класса, необходимо выполнить построение основного (или ожидающего передачи данных) приложения, которое бы позволяло решать следующие задачи:

  • выбирать и регистрировать канал, который является объектом, обрабатывающим сетевые протоколы и форматы сериализации от имени приложения;

  • регистрировать тип в системе удаленного взаимодействия .NET, чтобы можно было использовать канал для ожидания запросов к данному типу.

Платформа .NET Framework включает три канала по умолчанию HttpChannel (по умолчанию использует форматирование SOAP), TcpChannel (по умолчанию использует двоичное форматирование) и IpcChannel (по умолчанию использует двоичное форматирование). Канал HttpChannel можно использовать при наличии брандмауэров без открытия порта, и он поддерживает стандартные протоколы обеспечения безопасности и проверки подлинности. Дополнительные сведения о выборе каналов для конкретного сценария см. в разделе Каналы.

Построение приложения, ожидающего передачи данных, можно выполнить с использованием домена приложения любого типа — приложения Windows Forms, веб-приложения ASP.NET, консольного приложения, службы Windows Service (также называемой службой Windows NT) или любого другого управляемого домена приложения. Поскольку для каждого домена приложения выполняется удаленная настройка, для ожидания запросов домен приложения должен быть запущен.

ecc85927.note(ru-ru,VS.100).gifПримечание
В отличие от модели COM система удаленного взаимодействия не запускает основное (или серверное) приложение самостоятельно. В этом заключается важное различие между удаленным взаимодействием .NET и удаленной активацией в модели COM.

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

Система удаленного взаимодействия использует сведения в этом файле для ожидания и перенаправления удаленных запросов в экземпляр типа, поддерживающего удаленное взаимодействие. В файле задается режим активации сервером, имя типа и сборки типа, для которого ожидаются запросы, а также универсальный код ресурса (URI) объекта или внешнее имя объекта. (Дополнительные сведения об универсальных кодах ресурса (URI) объектов и удаленном взаимодействии см. в разделе URL-адреса активации.)

ecc85927.note(ru-ru,VS.100).gifПримечание
Хотя в предыдущем файле конфигурации содержится лишь несколько параметров, большинство проблем с использованием удаленного взаимодействия .NET происходит потому, что некоторые из этих параметров заданы неверно или не соответствуют параметрам конфигурации для клиентских приложений. Очень легко допустить ошибку при вводе имени, забыть номер порта или не указать атрибут. При возникновении проблем с приложением удаленного взаимодействия в первую очередь необходимо проверить параметры конфигурации.

Использование файла конфигурации позволяет изменять параметры удаленного взаимодействия без повторной компиляции исполняемых файлов и т. д. Дополнительные сведения о конфигурации инфраструктуры удаленного взаимодействия .NET см. в разделе Схема параметров удаленного взаимодействия.

ecc85927.note(ru-ru,VS.100).gifПримечание
Полные инструкции по построению и выполнению этого примера см. в разделе Как компилировать и выполнять базовое приложение для удаленного взаимодействия.

Реализация домена основного приложения с использованием файла конфигурации

  1. После выполнения инструкций раздела Как построить тип, поддерживающий удаленное взаимодействие создайте в каталоге remoting подкаталог с именем host. Создайте файл конфигурации для удаленного класса. Основное приложение должно иметь возможно загружать конфигурацию удаленного класса, а значит, файл конфигурации необходимо сохранить в одном каталоге со сборкой основного приложения. Если найти его не удастся, будет создано исключение. В следующем примере кода показан файл конфигурации, задающий удаленный объект типа Singleton; его реализацией является класс RemotableType, расположенный в сборке RemotableType. Затем в HttpChannel регистрируется прослушивание порта 8989. Сохраните файл в каталоге remoting\listener. Имя файла должно соответствовать шаблону имя-приложения.exe.config. В данном случае файл называется listener.exe.config.

    <configuration>
       <system.runtime.remoting>
          <application>
             <service>
                <wellknown 
                   mode="Singleton" 
                   type="RemotableType, RemotableType" 
                   objectUri="RemotableType.rem"
                />
             </service>
             <channels>
                <channel ref="http" port="8989"/>
             </channels>
          </application>
       </system.runtime.remoting>
    </configuration>
    
  2. Создайте новый исходный файл на любом языке. В верхней части исходного файла импортируйте следующее пространство имен System.Runtime.Remoting:

    Imports System
    Imports System.Runtime.Remoting
    
    using System;
    using System.Runtime.Remoting;
    
  3. В методе main загрузите файл конфигурации удаленного класса, выведите сообщение, чтобы пользователь знал, что основное приложение запущено, и ожидайте нажатия клавиши. Сохраните файл в каталоге remoting\listener.

    Public Class Listener
        Public Shared Sub Main()
            RemotingConfiguration.Configure("Listener.exe.config", False)
            Console.WriteLine("Listening for requests. Press enter to exit...")
            Console.ReadLine()
        End Sub
    End Class
    
    public class Listener
    {
        public static void Main()
        {
            RemotingConfiguration.Configure("Listener.exe.config", false);
            Console.WriteLine("Listening for requests. Press enter to exit...");
            Console.ReadLine();
        }
    
    }
    
  4. Скопируйте файл RemotableType.dll, созданный на этапе Как построить тип, поддерживающий удаленное взаимодействие, в каталог remoting\listener. Основное приложение должно содержать ссылку на эту сбору. Скомпилируйте этот класс в исполняемый файл с помощью следующей команды:

    vbc /r:RemotableType.dll Listener.vb
    
    csc /noconfig /r:RemotableType.dll Listener.cs
    
  5. Будет получена сборка с именем Listener.exe. Попытайтесь запустить ее и проверить, будет ли успешно выполнена настройка. Может появиться сообщение системы безопасности, если брандмауэр блокирует порт 8989. В этом случае нажмите кнопку "Разблокировать", чтобы временно открыть этот порт в брандмауэре.

  6. Сведения об использовании типа, поддерживающего удаленное взаимодействие, см. в разделе Как построить клиентское приложение.

Примеры

' Listener.vb
Public Class Listener
    Public Shared Sub Main()
        RemotingConfiguration.Configure("Listener.exe.config", False)
        Console.WriteLine("Listening for requests. Press enter to exit...")
        Console.ReadLine()
    End Sub
End Class
// Listener.cs
using System;
using System.Runtime.Remoting;

public class Listener
{
    public static void Main(string[] args)
    {
        RemotingConfiguration.Configure("Listener.exe.config", false);
        Console.WriteLine("Listening for requests. Press enter to exit...");
        Console.ReadLine();
    }
}

См. также

Задачи

Как построить ведущее приложение

Справочник

Схема параметров удаленного взаимодействия

Основные понятия

Конфигурация удаленных приложений
Активация сервером

Другие ресурсы

Построение базового приложения для удаленного взаимодействия на платформе .NET Framework

Дата сборки: 2010-02-13