Книга: C# для профессионалов. Том II
Отслеживание служб
Отслеживание служб
Отладку и поиск неисправностей в приложениях, использующих .NET, можно проводить через службы удаленного отслеживания. Класс System.Runtime.Remoting.Services.TrackingService
предоставляет службу слежения для получения информации о том, когда происходит маршализация и демаршализация, когда вызываются удаленные объекты и разъединяются и т. д.
? С помощью служебного класса TrackingServices
регистрируется и отменяется регистрация обработчика, который реализует ITrackingHandler
.
? Интерфейс ITrackingHandler
вызывается, когда на удаленном объекте или на прокси происходит событие. Можно реализовать три метода в обработчике: MarshaledObject()
, UnmarshaledObject()
и DisconnectedObject()
.
Чтобы увидеть службы слежения в действии на клиенте и на сервере, создадим новую библиотеку классов TrackingHandler
. Класс TrackingHandler
реализует интерфейс ITrackingHandler
. В методах задаются два аргумента: сам объект и ObjRef
. С помощью ObjRef
выдается информация об URI, канале и уполномоченных приемниках. Можно также присоединить новые приемники для добавления спонсоров всех вызываемых методов. В данном примере на консоль записывается URI и информация о канале.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Services;
namespace Wrox.ProfessionalCSharp (
public class TrackingHandler : ITrackingHandler {
public TrackingHandler() {
}
public void MarshaledObject(object obj, ObjRef or) {
Console.WriteLine("--- Marshaled Object " + obj.GetType() + " ---");
Console.WriteLine("Object URI: " + or.URI);
object[] ChannelData = or.ChannelInfo.ChannelData;
foreach(object data in ChannelData) {
ChannelDataStore dataStore = data as ChannelDataStore;
if (dataStore != null) {
foreach (string uri in dataStore.ChannelUris) {
Console.WriteLine("Channel URI: " + uri);
}
}
}
Console.WriteLine("---------");
Console.WriteLine();
}
public void UnmarshaledObject(object obj, ObjRef or) {
Console.WriteLine("Unmarshal");
public void DisconnectedObject(Object obj) {
Console.WriteLine("Disconnect");
}
}
}
Серверная программа изменяется, чтобы регистрировать TrackingHandler
. Необходимо добавить только две строки, чтобы зарегистрировать обработчик.
using System.Runtime.Remoting.Services;
// ...
public static void Main(string[] args) {
TrackingServices.RegisterTrackingHandler(new TrackingHandler());
TCPChannel channel = new TCPChannel(8086);
// ...
При запуске сервера первый экземпляр создается во время регистрации хорошо известного типа, и мы получаем следующий вывод. Вызывается MarshaledObject()
и выводит тип объекта для маршализации — Wrox.ProfessionalCSharp.Hello
. С помощью Object URI мы видим GUID, который, используется внутренне в удаленной среде выполнения для различения определенных экземпляров и URI. С помощью канала URI можно проверить конфигурацию канала. В этом случае именем хоста будет Cnagel
:
- Каналы
- Форматтеры
- ChannelServices и RemotingContiguration
- Активизация объектов
- Приемники сообщений
- Передача объектов в удаленные методы
- Управление временем жизни
- Конфигурационные файлы
- Приложения хостинга
- Классы, интерфейсы и SOAPSuds
- Отслеживание служб
- Асинхронная удаленная работа
- Удаленное выполнение и события
- Контексты вызова
- Глава 8 Дополнительные службы
- 5.6 Служба теневого копирования томов в Windows ХР и Windows Server 2003
- Службы Windows SharePoint
- Версии служб Windows SharePoint
- 8.3. Отслеживание хода проекта и контроль над ним
- Стоит ли заниматься отключением ненужных служб при большом объеме оперативной памяти?
- При попытке создать пользователя или добавить его в группу появляется сообщение Служба Сервер не запущена
- 4.7. Защита служб
- 2.4.3 Служба имен DMS
- Приложение C Центры сетевой информации и другие службы
- Управляющий менеджер служб
- Пример:команднаяоболочкауправленияслужбами