TrackingServices Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет способ регистрации, отмены регистрации и получения списка дескрипторов отслеживания.
public ref class TrackingServices
public class TrackingServices
[System.Runtime.InteropServices.ComVisible(true)]
public class TrackingServices
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
public class TrackingServices
type TrackingServices = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type TrackingServices = class
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Security.SecurityCritical>]
type TrackingServices = class
Public Class TrackingServices
- Наследование
-
TrackingServices
- Атрибуты
Примеры
В следующем примере кода показано, как использовать методы TrackingServices класса для регистрации и отмены регистрации обработчиков отслеживания.
В следующем примере кода показано, как реализовать обработчик отслеживания.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Services;
// Intercept marshal, unmarshal, and disconnect events for an object.
public class TrackingHandler : ITrackingHandler
{
// Called when the tracked object is marshaled.
public void MarshaledObject(Object obj, ObjRef objRef)
{
// Notify the user of the marshal event.
Console.WriteLine("Tracking: An instance of {0} was marshaled.",
obj.ToString());
// Print the channel information.
if (objRef.ChannelInfo != null)
{
// Iterate over ChannelData.
foreach(object data in objRef.ChannelInfo.ChannelData)
{
if (data is ChannelDataStore)
{
// Print the URIs from the ChannelDataStore objects.
string[] uris = ((ChannelDataStore)data).ChannelUris;
foreach(string uri in uris)
Console.WriteLine("ChannelUri: " + uri);
}
}
}
// Print the envoy information.
if (objRef.EnvoyInfo != null)
Console.WriteLine("EnvoyInfo: " + objRef.EnvoyInfo.ToString());
// Print the type information.
if (objRef.TypeInfo != null)
{
Console.WriteLine("TypeInfo: " + objRef.TypeInfo.ToString());
Console.WriteLine("TypeName: " + objRef.TypeInfo.TypeName);
}
// Print the URI.
if (objRef.URI != null)
Console.WriteLine("URI: " + objRef.URI.ToString());
}
// Called when the tracked object is unmarshaled.
public void UnmarshaledObject(Object obj, ObjRef objRef)
{
Console.WriteLine("Tracking: An instance of {0} was unmarshaled.",
obj.ToString());
}
// Called when the tracked object is disconnected.
public void DisconnectedObject(Object obj)
{
Console.WriteLine("Tracking: An instance of {0} was disconnected.",
obj.ToString());
}
}
В следующем примере кода показано, как реализовать этот класс на сервере.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Services;
public class Server
{
public static void Main(string[] args)
{
// Register the TCP channel.
TcpChannel channel = new TcpChannel(1234);
ChannelServices.RegisterChannel(channel);
// Register a tracking handler.
ITrackingHandler handler1 = new TrackingHandler();
TrackingServices.RegisterTrackingHandler(handler1);
// Register a second handler.
ITrackingHandler handler2 = new TrackingHandler();
TrackingServices.RegisterTrackingHandler(handler2);
// Get the number of currently registered handlers.
Console.WriteLine("Registered tracking handlers: " +
TrackingServices.RegisteredHandlers.Length);
// Remove the tracking handler from the registered handlers.
TrackingServices.UnregisterTrackingHandler(handler2);
Console.WriteLine("Registered tracking handlers: " +
TrackingServices.RegisteredHandlers.Length);
// Create and marshal an object for remote invocation.
RemoteService service = new RemoteService();
ObjRef obj = RemotingServices.Marshal(service, "TcpService");
// Wait for the user prompt.
Console.WriteLine("\r\nPress ENTER to unmarshal the object.");
Console.ReadLine();
// Unmarshal the object.
RemotingServices.Unmarshal(obj);
// Wait for the user prompt.
Console.WriteLine("Press ENTER to disconnect the object.");
Console.ReadLine();
// Disconnect the object.
RemotingServices.Disconnect(service);
}
}
В следующем примере кода показано, как реализовать этот класс на клиенте для сервера в предыдущем примере кода.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
public class Client
{
public static void Main(string[] args)
{
// Register the TCP channel.
ChannelServices.RegisterChannel(new TcpChannel());
// Register the client for the remote object.
WellKnownClientTypeEntry remoteType = new WellKnownClientTypeEntry(
typeof(RemoteService),"tcp://localhost:1234/TcpService");
RemotingConfiguration.RegisterWellKnownClientType(remoteType);
// Create an instance of the remote object.
RemoteService service = new RemoteService();
// Invoke a method on the remote object.
service.Hello("world");
Console.WriteLine("Hello invoked on server.");
}
}
В следующем примере кода показан удаленный объект, используемый сервером и клиентом.
using System;
// Remote object.
public class RemoteService : MarshalByRefObject
{
private DateTime startTime;
public RemoteService()
{
// Notify the user that the constructor was invoked.
Console.WriteLine("Constructor invoked.");
startTime = DateTime.Now;
}
~RemoteService()
{
// Notify the user that the finalizer was invoked.
TimeSpan elapsedTime =
new TimeSpan(DateTime.Now.Ticks - startTime.Ticks);
Console.WriteLine("Finalizer invoked after " +
elapsedTime.ToString() + " seconds.");
}
public void Hello(string name)
{
// Print a simple message.
Console.WriteLine("Hello, " + name);
}
}
Комментарии
Обработчики отслеживания — это объекты, реализующие ITrackingHandler интерфейс , указывающие, что они должны получать уведомления всякий раз, когда инфраструктура удаленного взаимодействия маршалирует, отменяет или отключает объект или прокси-сервер. Каждый объект, зарегистрированный в TrackingServices , вызывается путем удаленного взаимодействия, когда объект или прокси-сервер в текущем AppDomain объекте маршалируется, отменяет маршалинг или отключается.
Все методы в TrackingServices классе являются статическими и работают с обработчиками отслеживания в текущем AppDomainобъекте .
Примечание
Этот класс создает запрос на связь. Исключение SecurityException возникает, если непосредственный вызывающий объект не имеет разрешения инфраструктуры. Дополнительные сведения см. в разделе Требования к ссылкам .
Конструкторы
TrackingServices() |
Создает экземпляр TrackingServices. |
Свойства
RegisteredHandlers |
Возвращает массив дескрипторов отслеживания, которые в настоящее время регистрируются с помощью TrackingServices в текущем AppDomain. |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
RegisterTrackingHandler(ITrackingHandler) |
Регистрирует новый дескриптор отслеживания с помощью TrackingServices. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
UnregisterTrackingHandler(ITrackingHandler) |
Отменяет регистрацию заданного дескриптора отслеживания из TrackingServices. |