Создание удаленного сервера с помощью Visual C#

Эта статья поможет вам создать удаленный сервер, к которому другое приложение может получить доступ с помощью Visual C#.

Исходная версия продукта: Visual C#
Исходный номер базы знаний: 307445

Сводка

В этой статье показано, как создать удаленный сервер, к которому может получить доступ другое приложение. Приложение, обращающееся к этому серверу, может находиться на том же компьютере, на другом компьютере или в другой сети. Удаленный сервер разбивается на две части: объект сервера и серверное приложение. Объект сервера — это объект, с которым взаимодействует клиент, и серверное приложение используется для регистрации объекта сервера в платформе удаленного взаимодействия .NET.

В этой статье рассматриваются следующие пространства имен библиотеки классов Microsoft платформа .NET Framework:

  • System.Runtime.Remoting
  • System.Runtime.Remoting.Channels
  • System.Runtime.Remoting.Channels.Tcp

Требования

В этой статье предполагается, что вы знакомы со следующими разделами:

  • Visual Studio .NET или Visual Studio
  • Visual C# .NET или Visual C#
  • Сеть

Создание объекта удаленного сервера

Первым шагом при создании серверного приложения является создание объекта сервера. Объект сервера — это то, что клиентское приложение создает экземпляры и взаимодействует с ним на серверном компьютере. Клиентское приложение делает это через прокси-объект, созданный на клиенте. В этом примере объект сервера находится в библиотеке классов (DLL) и называется myRemoteClass.

  1. Создайте приложение библиотеки классов в Visual C# .NET. Назовите проект ServerClass. Класс 1 создается по умолчанию.

  2. В Обозреватель решений переименуйте файл кода Class1.cs на ServerClass.cs.

  3. Откройте ServerClass.cs и переименуйте Class1 в myRemoteClass. Необходимо также переименовать конструктор по умолчанию для класса в , чтобы он соответствовал имени класса. класс myRemoteClass должен наследоваться MarshalByRefObject от класса . Теперь ваш класс должен выглядеть следующим образом:

    public class myRemoteClass: MarshalByRefObject
    {
        public myRemoteClass()
        {
          // TO DO: Add constructor logic here.
        }
    }
    
  4. Добавьте открытый метод в myRemoteClass , который принимает строку, отображает сообщение в консоль со значением строки и возвращает значение True , если строка не пуста.

    public bool SetString(String sTemp)
    {
         try
         {
             Console.WriteLine("This string '{0}' has a length of {1}", sTemp, sTemp.Length);
             return sTemp != "";
         }
         catch
         {
             return false;
         }
    }
    
  5. Выполните сборку проекта для создания сборкиServerClass.dll .

  6. Сохраните и закройте проект.

Создание удаленного серверного приложения

После создания объекта сервера, с которым будет взаимодействовать клиент, необходимо зарегистрировать этот объект в платформе удаленного взаимодействия. При регистрации объекта необходимо также запустить сервер и заставить сервер прослушивать порт, чтобы клиенты подключились к нему. Для этого требуется тип проекта, который выводит исполняемый файл.

Причина включения объекта сервера в отдельный проект заключается в том, что вы можете легко ссылаться на серверный объект из клиентского проекта. Если вы включите его в этот проект, вы не сможете ссылаться на него, так как ссылки могут быть заданы только для DLL-файлов.

  1. Создайте консольное приложение в Visual C# .NET, чтобы запустить удаленный сервер. Класс 1 создается по умолчанию.

  2. В Обозреватель решений переименуйте файл Class1.cs на RemoteServer.cs.

  3. Добавьте ссылку на System.Runtime.Remoting пространство имен.

  4. Добавьте ссылку на сборкуServerClass.dll , созданную в предыдущем разделе.

  5. Используйте инструкцию using для Remotingпространств имен , Remoting.Channelsи Remoting.Channels.TCP , чтобы позже в коде не требовалось квалифицировать объявления в этих пространствах имен. Оператор необходимо использовать using перед любыми другими объявлениями.

    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    
  6. Объявите соответствующую переменную. Объявите и инициализируйте TcpChannel объект, прослушивающий подключение клиентов через определенный порт, который в этом примере является портом 8085. Используйте метод для RegisterChannel регистрации канала в службах каналов. Добавьте следующий код объявления в процедуру MainClass1:

    TcpChannel chan = new TcpChannel(8085);
    ChannelServices.RegisterChannel(chan);
    
  7. RegisterWellKnownType Вызовите метод объекта , RemotingConfiguration чтобы зарегистрировать объект в ServerClass платформе удаленного взаимодействия, и укажите следующие параметры:

    • Полное имя типа регистрируемого объекта (в этом примере — ServerClass.myRemoteClass ), за которым следует имя сборки ServerClass. Укажите здесь имя пространства имен, а также имя класса. Так как пространство имен не указано в предыдущем разделе, используется корневое пространство имен по умолчанию.

    • Назовите конечную точку, где объект будет опубликован, как RemoteTest. Чтобы подключиться к объекту, клиенты должны знать это имя.

    • Используйте объектный SingleCall режим, чтобы указать окончательный параметр. Режим объекта указывает время существования объекта при его активации на сервере. В случае SingleCall объектов создается новый экземпляр класса для каждого вызова, который выполняет клиент, даже если один и тот же клиент вызывает один и тот же метод несколько раз. С другой стороны, Singleton объекты создаются только один раз, и все клиенты взаимодействуют с тем же объектом.

      RemotingConfiguration.RegisterWellKnownServiceType(
      System.Type.GetType("ServerClass.myRemoteClass, ServerClass"),
      "RemoteTest",
      WellKnownObjectMode.SingleCall);
      
  8. ReadLine Используйте метод объекта для Console поддержания работы серверного приложения.

    System.Console.WriteLine("Hit <enter> to exit...");
    System.Console.ReadLine();
    
  9. Выполните построение проекта.

  10. Сохраните и закройте проект.

Ссылки

Общие сведения о удаленном взаимодействии .NET см. в документации по платформа .NET Framework руководства разработчика.