IpcChannel Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit une implémentation de canal qui utilise le protocole IPC pour transmettre des messages.
public ref class IpcChannel : System::Runtime::Remoting::Channels::IChannelReceiver, System::Runtime::Remoting::Channels::IChannelSender, System::Runtime::Remoting::Channels::ISecurableChannel
public class IpcChannel : System.Runtime.Remoting.Channels.IChannelReceiver, System.Runtime.Remoting.Channels.IChannelSender, System.Runtime.Remoting.Channels.ISecurableChannel
type IpcChannel = class
interface IChannelReceiver
interface IChannelSender
interface IChannel
interface ISecurableChannel
type IpcChannel = class
interface IChannelReceiver
interface IChannel
interface IChannelSender
interface ISecurableChannel
Public Class IpcChannel
Implements IChannelReceiver, IChannelSender, ISecurableChannel
- Héritage
-
IpcChannel
- Implémente
Exemples
L’exemple de code suivant montre comment utiliser un IpcChannel pour configurer un serveur de communication à distance et son client. L’exemple contient trois parties :
Un serveur
Un client
Objet distant utilisé par le serveur et le client.
L’exemple de code suivant montre un serveur.
#using <System.dll>
#using <System.Runtime.Remoting.dll>
#using "common.dll"
using namespace System;
using namespace System::Runtime::Remoting::Channels::Ipc;
void main()
{
// Create the server channel.
IpcChannel^ serverChannel = gcnew IpcChannel( L"localhost:9090" );
// Register the server channel.
System::Runtime::Remoting::Channels::ChannelServices::RegisterChannel( serverChannel );
// Show the name of the channel.
Console::WriteLine( L"The name of the channel is {0}.", serverChannel->ChannelName );
// Show the priority of the channel.
Console::WriteLine( L"The priority of the channel is {0}.", serverChannel->ChannelPriority );
// Show the URIs associated with the channel.
System::Runtime::Remoting::Channels::ChannelDataStore^ channelData = (System::Runtime::Remoting::Channels::ChannelDataStore^)serverChannel->ChannelData;
for each (String^ uri in channelData->ChannelUris)
{
Console::WriteLine("The channel URI is {0}.", uri);
}
// Expose an object for remote calls.
System::Runtime::Remoting::RemotingConfiguration::RegisterWellKnownServiceType(
RemoteObject::typeid,L"RemoteObject.rem",
System::Runtime::Remoting::WellKnownObjectMode::Singleton);
// Parse the channel's URI.
array<String^>^ urls = serverChannel->GetUrlsForUri( L"RemoteObject.rem" );
if ( urls->Length > 0 )
{
String^ objectUrl = urls[ 0 ];
String^ objectUri;
String^ channelUri = serverChannel->Parse( objectUrl, objectUri );
Console::WriteLine( L"The object URI is {0}.", objectUri );
Console::WriteLine( L"The channel URI is {0}.", channelUri );
Console::WriteLine( L"The object URL is {0}.", objectUrl );
}
// Wait for the user prompt.
Console::WriteLine( L"Press ENTER to exit the server." );
Console::ReadLine();
Console::WriteLine( L"The server is exiting." );
}
using System;
using System.Runtime.Remoting.Channels.Ipc;
public class Server
{
public static void Main(string[] args)
{
// Create the server channel.
IpcChannel serverChannel =
new IpcChannel("localhost:9090");
// Register the server channel.
System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(
serverChannel);
// Show the name of the channel.
Console.WriteLine("The name of the channel is {0}.",
serverChannel.ChannelName);
// Show the priority of the channel.
Console.WriteLine("The priority of the channel is {0}.",
serverChannel.ChannelPriority);
// Show the URIs associated with the channel.
System.Runtime.Remoting.Channels.ChannelDataStore channelData =
(System.Runtime.Remoting.Channels.ChannelDataStore)
serverChannel.ChannelData;
foreach (string uri in channelData.ChannelUris)
{
Console.WriteLine("The channel URI is {0}.", uri);
}
// Expose an object for remote calls.
System.Runtime.Remoting.RemotingConfiguration.
RegisterWellKnownServiceType(
typeof(RemoteObject), "RemoteObject.rem",
System.Runtime.Remoting.WellKnownObjectMode.Singleton);
// Parse the channel's URI.
string[] urls = serverChannel.GetUrlsForUri("RemoteObject.rem");
if (urls.Length > 0)
{
string objectUrl = urls[0];
string objectUri;
string channelUri = serverChannel.Parse(objectUrl, out objectUri);
Console.WriteLine("The object URI is {0}.", objectUri);
Console.WriteLine("The channel URI is {0}.", channelUri);
Console.WriteLine("The object URL is {0}.", objectUrl);
}
// Wait for the user prompt.
Console.WriteLine("Press ENTER to exit the server.");
Console.ReadLine();
Console.WriteLine("The server is exiting.");
}
}
L’exemple de code suivant montre un client pour ce serveur.
#using <System.dll>
#using <System.Runtime.Remoting.dll>
#using "common.dll"
using namespace System;
using namespace System::Runtime::Remoting::Channels::Ipc;
void main()
{
// Create the channel.
IpcChannel^ channel = gcnew IpcChannel;
// Register the channel.
System::Runtime::Remoting::Channels::ChannelServices::RegisterChannel(channel);
// Register as client for remote object.
System::Runtime::Remoting::WellKnownClientTypeEntry^ remoteType = gcnew
System::Runtime::Remoting::WellKnownClientTypeEntry(
RemoteObject::typeid,L"ipc://localhost:9090/RemoteObject.rem" );
System::Runtime::Remoting::RemotingConfiguration::RegisterWellKnownClientType(remoteType);
// Create a message sink.
String^ objectUri;
System::Runtime::Remoting::Messaging::IMessageSink^ messageSink = channel->CreateMessageSink(
L"ipc://localhost:9090/RemoteObject.rem", nullptr, objectUri );
Console::WriteLine( L"The URI of the message sink is {0}.", objectUri );
if ( messageSink != nullptr )
{
Console::WriteLine( L"The type of the message sink is {0}.", messageSink->GetType() );
}
// Create an instance of the remote object.
RemoteObject^ service = gcnew RemoteObject;
// Invoke a method on the remote object.
Console::WriteLine( L"The client is invoking the remote object." );
Console::WriteLine( L"The remote object has been called {0} times.", service->GetCount() );
}
using System;
using System.Runtime.Remoting.Channels.Ipc;
public class Client
{
public static void Main(string[] args)
{
// Create the channel.
IpcChannel channel = new IpcChannel();
// Register the channel.
System.Runtime.Remoting.Channels.ChannelServices.
RegisterChannel(channel);
// Register as client for remote object.
System.Runtime.Remoting.WellKnownClientTypeEntry remoteType =
new System.Runtime.Remoting.WellKnownClientTypeEntry(
typeof(RemoteObject),
"ipc://localhost:9090/RemoteObject.rem");
System.Runtime.Remoting.RemotingConfiguration.
RegisterWellKnownClientType(remoteType);
// Create a message sink.
string objectUri;
System.Runtime.Remoting.Messaging.IMessageSink messageSink =
channel.CreateMessageSink(
"ipc://localhost:9090/RemoteObject.rem", null,
out objectUri);
Console.WriteLine("The URI of the message sink is {0}.",
objectUri);
if (messageSink != null)
{
Console.WriteLine("The type of the message sink is {0}.",
messageSink.GetType().ToString());
}
// Create an instance of the remote object.
RemoteObject service = new RemoteObject();
// Invoke a method on the remote object.
Console.WriteLine("The client is invoking the remote object.");
Console.WriteLine("The remote object has been called {0} times.",
service.GetCount());
}
}
L’exemple de code suivant montre l’objet distant utilisé par le serveur et le client.
using namespace System;
// Remote object.
public ref class RemoteObject: public MarshalByRefObject
{
private:
static int callCount = 0;
public:
int GetCount()
{
Console::WriteLine( L"GetCount has been called." );
callCount++;
return (callCount);
}
};
using System;
// Remote object.
public class RemoteObject : MarshalByRefObject
{
private int callCount = 0;
public int GetCount()
{
Console.WriteLine("GetCount has been called.");
callCount++;
return(callCount);
}
}
Remarques
Important
L’appel de méthodes de cette classe avec des données non approuvées est un risque de sécurité. Appelez les méthodes de cette classe avec des données approuvées uniquement. Pour plus d’informations, consultez Valider toutes les entrées.
Les canaux sont utilisés par l’infrastructure de communication à distance the.NET Framework pour transporter les appels distants. Lorsqu’un client appelle un objet distant, l’appel est sérialisé dans un message envoyé par un canal client et reçu par un canal serveur. Une fois le message reçu, il est désérialisé et traité. Toutes les valeurs retournées sont transmises par le canal serveur et reçues par le canal client.
La IpcChannel classe est une classe pratique combinant les fonctionnalités de la IpcClientChannel classe et de la IpcServerChannel classe.
Attention
Lorsque vous définissez la exclusiveAddressUse
propriété false
sur dans l’argument properties
, plusieurs IpcServerChannel objets peuvent être inscrits pour le même canal nommé. Dans ce cas, les demandes peuvent accéder à l’un des canaux inscrits. Ce paramètre est considéré comme sécurisé uniquement si des AAC sont également utilisés.
Constructeurs
IpcChannel() |
Initialise une nouvelle instance de la classe IpcChannel en activant uniquement un canal client et non un canal serveur. |
IpcChannel(IDictionary, IClientChannelSinkProvider, IServerChannelSinkProvider) |
Initialise une nouvelle instance de la classe IpcChannel avec les propriétés de configuration et les récepteurs spécifiés. |
IpcChannel(IDictionary, IClientChannelSinkProvider, IServerChannelSinkProvider, CommonSecurityDescriptor) |
Initialise une nouvelle instance de la classe IpcChannel avec les propriétés de configuration et les récepteurs spécifiés. |
IpcChannel(String) |
Initialise une nouvelle instance de la classe IpcChannel avec un canal serveur qui écoute sur le port IPC spécifié. |
Propriétés
ChannelData |
Obtient les données spécifiques de canal. |
ChannelName |
Obtient le nom du canal en cours. |
ChannelPriority |
Obtient la priorité du canal actuel. |
IsSecured |
Obtient ou définit une valeur Boolean qui indique si le canal actuel est sécurisé. |
Méthodes
CreateMessageSink(String, Object, String) |
Retourne un récepteur de messages de canal qui remet les messages à l'URL ou à l'objet de données de canal spécifié. |
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
GetUrlsForUri(String) |
Retourne un tableau de toutes les URL d'un objet doté de l'URI spécifié qui sont hébergées sur IpcChannel en cours. |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
Parse(String, String) |
Extrait l'URI du canal et de l'objet connu distant à partir de l'URL spécifiée. |
StartListening(Object) |
Commande au canal en cours de démarrer l'écoute des demandes. |
StopListening(Object) |
Commande au canal en cours d'arrêter l'écoute des demandes. |
ToString() |
Retourne une chaîne qui représente l'objet actuel. (Hérité de Object) |