Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

}

public string Greeting(string name) {

Console.WriteLine("Greeting called");

return "Hello, " + name;

}

 }

}

Простой сервер

Для сервера используется консольное приложение C#. Для применения класса

TcpServerChannel
необходимо сослаться на сборку
System.Runtime.Remoting.dll
. Также требуется, чтобы мы ссылались на созданную ранее сборку
RemoteHello.dll
.

В методе

Main
создается объект
System.Runtime.Remoting.Channel.Тcр.TcpServerChannel
с портом номер 8086. Этот канал регистрируется в классе
System.Runtime.Remoting.Channels.ChannelServices
, чтобы сделать его доступным для удаленных объектов. Тип удаленного объекта регистрируется с помощью
System.Runtime.Remoting.RemotingConfiguration.RegisterWellKnownServiceType
. Здесь определяется тип класса в удаленном объекте, используемый клиентом URI, и режим. Режим
WellKnownObject.SingleCall
означает, что для каждого вызова метода создается новый экземпляр, мы не храним состояние в удаленном объекте.

После регистрации удаленного объекта продолжим выполнение сервера, пока не будет нажата клавиша:

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Tcp;

namespace Wrox.ProfessionalCSharp {

 /// <summary>

 /// Краткое описание Class1

 /// </summary>

 public class HelloServer {

public static void Main(string[] args) {

TcpServerChannel channel = new TcpServerChannel(8086);

ChannelServices.RegisterChannel(channel);

RemotingConfiguration.RegisterWellKnownServiceType(

typeof(Hello), "Hi", WellKnownObjectMode.SingleCall);

System.Console.WriteLine("hit to exit");

System.Console.ReadLine;

}

 }

}

Простой клиент

Клиент также является консольным приложением C#. И здесь делается ссылка на сборку

System.Runtime.Remoting.dll
, чтобы можно было использовать класс
TcpClientChannel
. Кроме того, имеется ссылка на сборку
RemoteHello.dll
. Хотя объект будет создаваться на удаленном сервере, нам понадобится сборка на стороне клиента, чтобы прокси прочитал метаданные во время выполнения.

В клиентской программе создается объект

TcpClientChannel
, который регистрируется в
ChannelServices
. Для
TcpChannel
используется конструктор по умолчанию, поэтому выбирается свободный порт. Затем используется класс
Activator
для возврата прокси удаленному объекту. Прокси является типом
System.Runtime.Remoting.Proxies._TransparentProxy
. Этот объект выглядит как реальный. Это делается с помощью механизма отражения, в котором считываются метаданные реального объекта. Прозрачный прокси использует реальный для пересылки сообщений в канал:

using System;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Tcp;

namespace Wrox.ProfessionalCSharp {

 /// <summary>

 /// Краткое описание Class1.

 /// </summary>

 public class HelloClient {

public static void Main(string[] args) {

ChannelServices.RegisterChannel(new TcpClientChannel);

Hello obj = (Hello)Activator.GetObject(typeof(Hello), "tcp://localhost:8086/Hi");

if (obj == null) {

Console.WriteLine("could not locate server"); return;

}

for (int i = 0; i < 5; i++) {

Console.WriteLine(obj.Greeting("Christian"));

}

}

 }

}

Когда запустятся сервер и клиентская программа Hello, Christian появится пять раз на клиентской консоли. В консольном окне серверного приложения можно будет увидеть вывод, аналогичный следующему:

  • Читать дальше
  • 1
  • ...
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: