Создание удаленного сервера с помощью 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.
Создайте приложение библиотеки классов в Visual C# .NET. Назовите проект ServerClass. Класс 1 создается по умолчанию.
В Обозреватель решений переименуйте файл кода Class1.cs на ServerClass.cs.
Откройте ServerClass.cs и переименуйте Class1 в myRemoteClass. Необходимо также переименовать конструктор по умолчанию для класса в , чтобы он соответствовал имени класса. класс myRemoteClass должен наследоваться
MarshalByRefObject
от класса . Теперь ваш класс должен выглядеть следующим образом:public class myRemoteClass: MarshalByRefObject { public myRemoteClass() { // TO DO: Add constructor logic here. } }
Добавьте открытый метод в 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; } }
Выполните сборку проекта для создания сборкиServerClass.dll .
Сохраните и закройте проект.
Создание удаленного серверного приложения
После создания объекта сервера, с которым будет взаимодействовать клиент, необходимо зарегистрировать этот объект в платформе удаленного взаимодействия. При регистрации объекта необходимо также запустить сервер и заставить сервер прослушивать порт, чтобы клиенты подключились к нему. Для этого требуется тип проекта, который выводит исполняемый файл.
Причина включения объекта сервера в отдельный проект заключается в том, что вы можете легко ссылаться на серверный объект из клиентского проекта. Если вы включите его в этот проект, вы не сможете ссылаться на него, так как ссылки могут быть заданы только для DLL-файлов.
Создайте консольное приложение в Visual C# .NET, чтобы запустить удаленный сервер. Класс 1 создается по умолчанию.
В Обозреватель решений переименуйте файл Class1.cs на RemoteServer.cs.
Добавьте ссылку на
System.Runtime.Remoting
пространство имен.Добавьте ссылку на сборкуServerClass.dll , созданную в предыдущем разделе.
Используйте инструкцию
using
дляRemoting
пространств имен ,Remoting.Channels
иRemoting.Channels.TCP
, чтобы позже в коде не требовалось квалифицировать объявления в этих пространствах имен. Оператор необходимо использоватьusing
перед любыми другими объявлениями.using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp;
Объявите соответствующую переменную. Объявите и инициализируйте
TcpChannel
объект, прослушивающий подключение клиентов через определенный порт, который в этом примере является портом 8085. Используйте метод дляRegisterChannel
регистрации канала в службах каналов. Добавьте следующий код объявления в процедуруMain
Class1
:TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);
RegisterWellKnownType
Вызовите метод объекта ,RemotingConfiguration
чтобы зарегистрировать объект вServerClass
платформе удаленного взаимодействия, и укажите следующие параметры:Полное имя типа регистрируемого объекта (в этом примере — ServerClass.myRemoteClass ), за которым следует имя сборки ServerClass. Укажите здесь имя пространства имен, а также имя класса. Так как пространство имен не указано в предыдущем разделе, используется корневое пространство имен по умолчанию.
Назовите конечную точку, где объект будет опубликован, как RemoteTest. Чтобы подключиться к объекту, клиенты должны знать это имя.
Используйте объектный
SingleCall
режим, чтобы указать окончательный параметр. Режим объекта указывает время существования объекта при его активации на сервере. В случаеSingleCall
объектов создается новый экземпляр класса для каждого вызова, который выполняет клиент, даже если один и тот же клиент вызывает один и тот же метод несколько раз. С другой стороны,Singleton
объекты создаются только один раз, и все клиенты взаимодействуют с тем же объектом.RemotingConfiguration.RegisterWellKnownServiceType( System.Type.GetType("ServerClass.myRemoteClass, ServerClass"), "RemoteTest", WellKnownObjectMode.SingleCall);
ReadLine
Используйте метод объекта дляConsole
поддержания работы серверного приложения.System.Console.WriteLine("Hit <enter> to exit..."); System.Console.ReadLine();
Выполните построение проекта.
Сохраните и закройте проект.
Ссылки
Общие сведения о удаленном взаимодействии .NET см. в документации по платформа .NET Framework руководства разработчика.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по