Freigeben über


IpcServerChannel Klasse

Definition

Implementiert einen Serverchannel für Remoteaufrufe, der das IPC-System zum Übertragen von Meldungen verwendet.

public ref class IpcServerChannel : System::Runtime::Remoting::Channels::IChannelReceiver, System::Runtime::Remoting::Channels::ISecurableChannel
public class IpcServerChannel : System.Runtime.Remoting.Channels.IChannelReceiver, System.Runtime.Remoting.Channels.ISecurableChannel
type IpcServerChannel = class
    interface IChannelReceiver
    interface IChannel
    interface ISecurableChannel
Public Class IpcServerChannel
Implements IChannelReceiver, ISecurableChannel
Vererbung
IpcServerChannel
Implementiert

Beispiele

Im folgenden Codebeispiel wird die Verwendung der IpcServerChannel -Klasse veranschaulicht.

#using <system.runtime.remoting.dll>
#using <System.dll>
#using <Counter.dll>

using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Channels::Ipc;

public ref class IpcServer
{
public:
   void IpcServerTest()
   {
      // Create and register an IPC channel
      IpcServerChannel^ serverChannel = gcnew IpcServerChannel( L"remote" );
      ChannelServices::RegisterChannel( serverChannel );

      // Expose an object
      RemotingConfiguration::RegisterWellKnownServiceType( Counter::typeid, L"counter", WellKnownObjectMode::Singleton );
      
      // Wait for calls
      Console::WriteLine( L"Listening on {0}", serverChannel->GetChannelUri() );

      Console::ReadLine();
   }
};

int main()
{
   IpcServer^ is = gcnew IpcServer;
   is->IpcServerTest();
}
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Ipc;

public class IpcServer
{

    public static void Main ()
    {
        // Create and register an IPC channel
        IpcServerChannel serverChannel = new IpcServerChannel("remote");
        ChannelServices.RegisterChannel(serverChannel);

        // Expose an object
        RemotingConfiguration.RegisterWellKnownServiceType( typeof(Counter), "counter", WellKnownObjectMode.Singleton );

        // Wait for calls
        Console.WriteLine("Listening on {0}", serverChannel.GetChannelUri());
        Console.ReadLine();
    }
}

Der obige Code wird verwendet, um das folgende Remoteobjekt verfügbar zu machen.

using namespace System;
public ref class Counter: public MarshalByRefObject
{
private:
   int count;

public:
   Counter()
   {
      count = 0;
   }

   property int Count 
   {
      int get()
      {
         return (count)++;
      }
   }
};
using System;

public class Counter : MarshalByRefObject {

  private int count = 0;

  public int Count { get {
    return(count++);
  } }
}

Ein Beispiel für einen Client, der dieses Objekt remote verwendet, finden Sie unter IpcClientChannel.

Hinweise

Wichtig

Das Aufrufen von Methoden aus dieser Klasse mit nicht vertrauenswürdigen Daten stellt ein Sicherheitsrisiko dar. Rufen Sie die Methoden aus dieser Klasse nur mit vertrauenswürdigen Daten auf. Weitere Informationen finden Sie unter Überprüfen aller Eingaben.

Kanäle werden von der .NET Framework Remotinginfrastruktur verwendet, um Remoteanrufe zu übertragen. Wenn ein Client ein Remoteobjekt aufruft, wird der Aufruf in eine Nachricht serialisiert, die von einem Clientkanal gesendet und von einem Serverkanal empfangen wird. Nachdem die Nachricht empfangen wurde, wird sie deserialisiert und verarbeitet. Alle zurückgegebenen Werte werden vom Serverkanal übertragen und vom Clientkanal empfangen.

Die IpcServerChannel -Klasse verwendet das Windows-IPC-System (Interprocess Communication), um Nachrichten zwischen Anwendungsdomänen auf demselben Computer zu transportieren. Bei der Kommunikation zwischen Anwendungsdomänen auf demselben Computer ist der IPC-Kanal viel schneller als die TCP- oder HTTP-Kanäle.

Um eine zusätzliche Verarbeitung von Nachrichten auf serverseitiger Seite durchzuführen, geben Sie eine Implementierung der IServerChannelSinkProvider Schnittstelle an, über die alle von der IpcServerChannel Instanz verarbeiteten Nachrichten übergeben werden.

Die IpcServerChannel -Instanz akzeptiert Nachrichten, die entweder im Binär- oder SOAP-Format serialisiert sind.

Ein IpcServerChannel Objekt verfügt über zugeordnete Konfigurationseigenschaften, die zur Laufzeit entweder in einer Konfigurationsdatei (durch Aufrufen der statischen RemotingConfiguration.Configure Methode) oder programmgesteuert (durch Übergeben einer IDictionary Auflistung an den IpcServerChannel Konstruktor) festgelegt werden können. Eine Liste dieser Konfigurationseigenschaften finden Sie in der Dokumentation für den IpcServerChannel Konstruktor.

Achtung

Wenn Sie die exclusiveAddressUse -Eigenschaft im properties Argument auf false festlegen, können mehrere IpcServerChannel Objekte für dieselbe Named Pipe registriert werden. In diesem Fall können Anforderungen an jeden der registrierten Kanäle gesendet werden. Diese Einstellung gilt nur dann als sicher, wenn auch ALCs verwendet werden.

Konstruktoren

IpcServerChannel(IDictionary, IServerChannelSinkProvider)

Initialisiert eine neue Instanz der IpcServerChannel-Klasse mit den angegebenen Channeleigenschaften und der angegebenen Channelsenke.

IpcServerChannel(IDictionary, IServerChannelSinkProvider, CommonSecurityDescriptor)

Initialisiert eine neue Instanz der IpcServerChannel-Klasse mit den angegebenen Channeleigenschaften, der angegebenen Channelsenke und der angegebenen Sicherheitsbeschreibung.

IpcServerChannel(String)

Initialisiert eine neue Instanz der IpcServerChannel-Klasse mit dem angegebenen IPC-Anschlussnamen.

IpcServerChannel(String, String)

Initialisiert eine neue Instanz der IpcServerChannel-Klasse mit dem angegebenen Channelnamen und IPC-Anschlussnamen.

IpcServerChannel(String, String, IServerChannelSinkProvider)

Initialisiert eine neue Instanz der IpcServerChannel-Klasse mit dem angegebenen Channelnamen, dem angegebenen IPC-Anschlussnamen und der angegebenen Senke.

Eigenschaften

ChannelData

Ruft channelspezifische Daten ab.

ChannelName

Ruft den Namen des aktuellen Channels ab.

ChannelPriority

Ruft die Priorität des aktuellen Channels ab.

IsSecured

Ruft einen booleschen Wert ab, der angibt, ob der aktuelle Channel sicher ist, oder legt diesen fest.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetChannelUri()

Gibt den URI des aktuellen Channels zurück.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
GetUrlsForUri(String)

Gibt ein Array sämtlicher URLs für das Objekt mit dem angegebenen URI zurück, für das die aktuelle IpcChannel-Instanz als Host fungiert.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
Parse(String, String)

Extrahiert aus der angegebenen URL den Channel-URI und den URI des bekannten Remoteobjekts.

StartListening(Object)

Weist den aktuellen Channel an, mit der Überwachung von Anforderungen zu beginnen.

StopListening(Object)

Weist den aktuellen Channel an, die Überwachung von Anforderungen zu beenden.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für: