Поделиться через


Создание удаленного сервера с помощью 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. Назовите project ServerClass. Класс1 создается по умолчанию.

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

  3. Откройте ServerClass.cs и переименуйте класс1 в 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 в RemotingRemoting.Channelsпространствах имен и Remoting.Channels.TCP пространствах имен, чтобы не требоваться квалифицировать объявления в этих пространствах имен позже в коде. Перед любыми другими объявлениями необходимо использовать инструкцию using .

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

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

    • Полное имя объекта, зарегистрированного (который является 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 разработчика.