Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как создать удаленный сервер, где другое приложение может получить доступ с помощью 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. Назовите project ServerClass. Класс1 создается по умолчанию.
В Обозреватель решений переименуйте файл кода Class1.cs на ServerClass.cs.
Откройте ServerClass.cs и переименуйте класс1 в 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
Вызовите метод объекта для регистрацииServerClass
объекта в платформе удаленногоRemotingConfiguration
взаимодействия и укажите следующие параметры:Полное имя объекта, зарегистрированного (который является 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 разработчика.