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

Ватсон Карли

Шрифт:

Для данных контекста вызова здесь создается новая библиотека классов C# с вновь созданным классом

CallContextData
. Этот класс будет использоваться для передачи некоторых данных от клиента серверу с каждым вызовом метода. Класс, который передается с контекстом вызова, должен реализовать интерфейс
System.Runtime.Remoting.Messaging.ILogicalThreadAffinative
. Этот интерфейс не имеет метода, это просто отметка для среды выполнения, определяющая, что экземпляры этого класса перемещаются вместе с логическим потока выполнения. Класс
CallContextData
также помечается атрибутом
Serializable
, чтобы он мог передаваться по каналу:

using System;

using System.Runtime.Remoting.Messaging

namespace Wrox.ProfessionalCSharp {

 [Serializable]

 public class CallContextData : ILogicalThreadAffinative {

public CallContextData { }

public string Data {

get {

return data;

}

set {

data = value;

}

}

protected string data;

 }

}

В классе

Hello
метод
Greeting
изменяется так, чтобы можно было получить доступ к контексту вызова. Для использования класса
CallContextData
необходимо сослаться на созданную ранее сборку
CallContextData.dll
. Чтобы работать с классом
CallContext
, должно быть открыто пространство имен
System.Runtime.Remoting.Messaging
:

public string Greeting(string name) {

 Console.WriteLine("Greeting started");

 CallContextData cookie = (CallContextData)CallContext.GetData("mycookie");

 if (cookie ! = null) {

Console.WriteLine("Cookie: " + cookie.Data);

 }

 Console.WriteLine("Greeting finished");

 return "Hello, " + name;

}

В клиентском коде передается информация контекста вызова:

CallContextData cookie = new CallContextData;

cookie.Data = "information for the server";

CallContext.SetData("mycookie", cookie);

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

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

}

Такой контекст вызова может использоваться для отправки информации о пользователе, имени клиентской системы или просто как уникальный идентификатор, который применяется на серверной стороне для получения из базы данных некоторой информации о состоянии.

Заключение

В этой главе мы видели, что .NET Remoting использовать очень легко. Удаленный объект должен просто наследовать из объекта

MarshalByRefObject
. В серверном приложении требуется только один метод для загрузки конфигурационного файла, чтобы настроить и запустить каналы и удаленные объекты. На клиенте загружается конфигурационный файл и используется оператор new для создания экземпляра удаленного объекта.

Также не слишком много работы требуется и в случаях, когда конфигурационные файлы не используются. На сервере создается канал и регистрируется удаленный объект. На клиенте делается канал и используется удаленный объект.

Наравне с этими приемами применяют много механизмов из других частей .NET Framework, которые также работают с .NET Remoting, такие как вызов асинхронных методов, выполнение обратных вызовов с помощью ключевых слов

delegate
и
event
и т. д.

Таким образом, использование .NET Remoting является очень простым, архитектура достаточно гибкой и по желанию расширяемой. Можно использовать каналы HTTP и TCP, которые также расширяются, или написать новые каналы с самого начала. Существуют форматтер SOAP и двоичный форматтер, но легко можно использовать свой собственный. Также имеется много точек перехвата, где возможно добавление в классы специальной функциональности, которая доставляется с помощью .NET Framework.

Глава 24

Службы Windows

В главе 22 рассматривается работа в сети, глава 23 охватывает работу с серверами с помощью .NET Remoting. Описанные серверные процессы запускаются вручную. Однако программы должны начинать работать автоматически во время запуска машины. Здесь на помощь приходят службы Windows.

В этой главе мы рассмотрим следующие вопросы:

□ Архитектура служб Windows, функциональность служебной программы, служебная управляющая программа, и служебная конфигурационная программа.

  • Читать дальше
  • 1
  • ...
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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