TrackingServices Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt een manier om een lijst met traceringshandlers te registreren, de registratie ervan op te heffen en op te halen.
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
- Overname
-
TrackingServices
- Kenmerken
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u de methoden van de TrackingServices klasse gebruikt om handlers te registreren en de registratie ervan ongedaan te maken.
In het volgende codevoorbeeld ziet u hoe u een traceringshandler implementeert.
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());
}
}
In het volgende codevoorbeeld ziet u hoe u deze klasse op een server implementeert.
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);
}
}
In het volgende codevoorbeeld ziet u hoe u deze klasse implementeert op een client voor de server in het voorgaande codevoorbeeld.
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.");
}
}
In het volgende codevoorbeeld ziet u het externe object dat wordt gebruikt door de server en de client.
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);
}
}
Opmerkingen
Traceringshandlers zijn objecten die de ITrackingHandler interface implementeren, waarmee wordt aangegeven dat ze moeten worden gewaarschuwd wanneer de externe infrastructuur marshals, onmarshals, of een object of proxy loskoppelt. Elk object waarmee is geregistreerd TrackingServices , wordt aangeroepen door externe communicatie wanneer een object of proxy in de huidige AppDomain marshaled, niet-gemarhaleerd of verbroken is.
Alle methoden in de TrackingServices klasse zijn statisch en werken op de traceringshandlers in de huidige AppDomain.
Note
Deze klasse maakt een koppelingsvraag. Er wordt een SecurityException gegenereerd als de directe beller geen infrastructuurmachtiging heeft. Zie Koppelingsvereisten voor meer informatie.
Constructors
| Name | Description |
|---|---|
| TrackingServices() |
Hiermee maakt u een exemplaar van TrackingServices. |
Eigenschappen
| Name | Description |
|---|---|
| RegisteredHandlers |
Hiermee haalt u een matrix op van de traceringshandlers waarmee momenteel is geregistreerd TrackingServices in de huidige AppDomain. |
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| RegisterTrackingHandler(ITrackingHandler) |
Registreert een nieuwe tracking-handler bij de TrackingServices. |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
| UnregisterTrackingHandler(ITrackingHandler) |
Hiermee wordt de registratie van de opgegeven traceringshandler van TrackingServices. |