TrackingServices Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona un medio para registrar, anular el registro y obtener una lista de controladores de seguimiento.
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
- Herencia
-
TrackingServices
- Atributos
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar los métodos de la TrackingServices clase para registrar y anular el registro de controladores de seguimiento.
En el ejemplo de código siguiente se muestra cómo implementar un controlador de seguimiento.
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());
}
}
En el ejemplo de código siguiente se muestra cómo implementar esta clase en un servidor.
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);
}
}
En el ejemplo de código siguiente se muestra cómo implementar esta clase en un cliente para el servidor en el ejemplo de código anterior.
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.");
}
}
En el ejemplo de código siguiente se muestra el objeto remoto que usa el servidor y el cliente.
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);
}
}
Comentarios
Los controladores de seguimiento son objetos que implementan la ITrackingHandler interfaz, lo que indica que deben recibir una notificación cada vez que la infraestructura de comunicación remota serializa, anula la marca o desconecta un objeto o proxy. Cada objeto que se registra con TrackingServices se llama mediante comunicación remota cuando un objeto o proxy en el actual AppDomain se serializa, unmarshaled o se desconecta.
Todos los métodos de la TrackingServices clase son estáticos y funcionan en los controladores de seguimiento en el actual AppDomain.
Nota
Esta clase hace una demanda de vínculo. Se produce una excepción SecurityException si el llamador inmediato no tiene permiso de infraestructura. Consulte Solicitudes de vínculo para obtener más información.
Constructores
TrackingServices() |
Crea una instancia de TrackingServices. |
Propiedades
RegisteredHandlers |
Obtiene una matriz de los controladores de seguimiento registrados actualmente con TrackingServices en el AppDomain actual. |
Métodos
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
RegisterTrackingHandler(ITrackingHandler) |
Registra un nuevo controlador de seguimiento con TrackingServices. |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
UnregisterTrackingHandler(ITrackingHandler) |
Anula el registro del controlador de seguimiento especificado en TrackingServices. |