Теперь, когда есть приемник, который будет обслуживать удаленный объект, остается последний шаг — построение сборки, которая будет запрашивать доступ к его соответствующим возможностям. Для этого необходимо добавить в ваше решение новый проект консольного приложения клиента, установить в класса клиента ссылку на System.Runtime.Remoting.dll и SimpleRemotingAsm.dll и реализовать его метод Main () следующим образом:
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using SimpleRemotingAsm;
namespace SimpleRemoteObjectClient
{
class SimpleObjClient
{
static void Main(string[] args)
{
Console.WriteLine("***** SimpleRemoteObjectClient started! *****");
Console.WriteLine("Hit enter to end.");
// Создание нового HttpChannel
HttpChannel c = new HttpChannel();
ChannelServices.RegisterChannel(c);
// Получение прокси для удаленного доступа к WKO-типу
object remoteObj = Activator.GetObject(
typeof(SimpleRemotingAsm.RemoteMessageObject),
"http://localhost:32469/RemoteMsgObj.soap");
// Использование удаленного объекта
RemoteMessageObject simple = (RemoteMessageObject)remoteObj;
simple.DisplayMessage("Hello from the client!");
Console.WriteLine("Server says: {0}", simple.ReturnMessage());
Console.ReadLine();
}
}
}
Здесь следует обратить внимание на следующее. Во-первых, клиент также должен зарегистрировать HTTP -канал, но идентификатор порта при этом не указывается, поскольку конечная точка канала задается адресом URL активизации, посылаемым клиентом. Поскольку клиент взаимодействует с запрашиваемым WKO- типом, то необходимо активизировать конструктор типа, заданный по умолчанию. Для этого вызывается метод Activator.GetObject (), с двумя аргументами. Первый — информация о типе, описывающая удаленный объект, с которым нужно взаимодействовать. Поскольку метод Activator.GetObject () требует метаданных описания объекта, то становится ясно, почему для клиента также требуется иметь ссылку на общую сборку.
|
|
Второй параметр Activator.GetObject () представляется как URL активизации. Значение URL активизации, которое описывает WKO -тип, можно представить в следующем обобщенном формате:
СхемаПротокола:// ИмяКомпьютера: Порт / UriОбъекта
И, наконец, следует отметить, что метод Activator.GetObject () возвращает общий тип System.Object и поэтому для получения доступа к членам RemoteMessageObject необходимо использовать явное приведение типа.
2.4. Тестирование удаленного приложения
Чтобы протестировать удаленное приложение, следует начать с запуска серверного приложения, которое откроет канал HTTP и зарегистрирует объект RemoteMessageObject для удаленного доступа. Затем нужно запустить экземпляр клиентского приложения. Если все пройдет нормально, то серверное окно должно выглядеть, как показано на рис. 3, а клиентское приложение отобразит то, что представлено на рис. 4.
Рис. 3. Вывод сервера
Рис. 4. Вывод клиента