Freigeben über


TcpChannel Klasse

Definition

Stellt eine Kanalimplementierung bereit, die das TCP-Protokoll zum Übertragen von Nachrichten verwendet.

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

Beispiele

Das folgende Codebeispiel zeigt, wie sie einen TcpChannel Remotingserver und seinen Client einrichten. Das Beispiel enthält drei Teile, einen Server, einen Client und ein Remoteobjekt, das vom Server und dem Client verwendet wird.

Das folgende Codebeispiel zeigt einen Server:

#using <System.Runtime.Remoting.dll>
#using <System.dll>
#using <common.dll>

using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Channels::Tcp;
using namespace System::Security::Permissions;

[SecurityPermission(SecurityAction::Demand)]
int main(array<String^>^ args)
{
    // Create the server channel.
    TcpChannel^ serverChannel = gcnew TcpChannel(9090);

    // Register the server channel.
    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.
    ChannelDataStore^ data = (ChannelDataStore^) serverChannel->ChannelData;
    for each (String^ uri in data->ChannelUris)
    {
        Console::WriteLine("The channel URI is {0}.", uri);
    }

    // Expose an object for remote calls.
    RemotingConfiguration::RegisterWellKnownServiceType(
        RemoteObject::typeid, "RemoteObject.rem", 
        WellKnownObjectMode::Singleton);

    // Parse the channel's URI.
    array<String^>^ urls = serverChannel->GetUrlsForUri("RemoteObject.rem");
    if (urls->Length > 0)
    {
        String^ objectUrl = urls[0];
        String^ objectUri;
        String^ channelUri = serverChannel->Parse(objectUrl, objectUri);
        Console::WriteLine("The object URL is {0}.", objectUrl);
        Console::WriteLine("The object URI is {0}.", objectUri);
        Console::WriteLine("The channel URI is {0}.", channelUri);
    }
        
    // Wait for the user prompt.
    Console::WriteLine("Press ENTER to exit the server.");
    Console::ReadLine();
}
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

public class Server
{
    public static void Main(string[] args)
    {
        // Create the server channel.
        TcpChannel serverChannel = new TcpChannel(9090);

        // Register the server channel.
        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.
        ChannelDataStore data = (ChannelDataStore) serverChannel.ChannelData;
        foreach (string uri in data.ChannelUris)
        {
            Console.WriteLine("The channel URI is {0}.", uri);
        }

        // Expose an object for remote calls.
        RemotingConfiguration.RegisterWellKnownServiceType(
            typeof(RemoteObject), "RemoteObject.rem",
            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 URL is {0}.", objectUrl);
            Console.WriteLine("The object URI is {0}.", objectUri);
            Console.WriteLine("The channel URI is {0}.", channelUri);
        }

        // Wait for the user prompt.
        Console.WriteLine("Press ENTER to exit the server.");
        Console.ReadLine();
    }
}

Das folgende Codebeispiel zeigt einen Client für diesen Server:

#using <System.Runtime.Remoting.dll>
#using <System.dll>
#using <common.dll>

using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Channels::Tcp;
using namespace System::Security::Permissions;

int main(array<String^>^ args)
{
    // Create the channel.
    TcpChannel^ clientChannel = gcnew TcpChannel();

    // Register the channel.
    ChannelServices::RegisterChannel(clientChannel, false);

    // Register as client for remote object.
    WellKnownClientTypeEntry^ remoteType = gcnew WellKnownClientTypeEntry(
        RemoteObject::typeid,"tcp://localhost:9090/RemoteObject.rem");
    RemotingConfiguration::RegisterWellKnownClientType(remoteType);

    // Create a message sink.
    String^ objectUri;
    System::Runtime::Remoting::Messaging::IMessageSink^ messageSink = 
        clientChannel->CreateMessageSink(
            "tcp://localhost:9090/RemoteObject.rem", nullptr,
            objectUri);
    Console::WriteLine("The URI of the message sink is {0}.", 
        objectUri);
    if (messageSink != nullptr)
    {
        Console::WriteLine("The type of the message sink is {0}.", 
            messageSink->GetType()->ToString());
    }

    // Create an instance of the remote object.
    RemoteObject^ service = gcnew 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());
}
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)
    {
        // Create the channel.
        TcpChannel clientChannel = new TcpChannel();

        // Register the channel.
        ChannelServices.RegisterChannel(clientChannel, false);

        // Register as client for remote object.
        WellKnownClientTypeEntry remoteType = new WellKnownClientTypeEntry(
            typeof(RemoteObject),"tcp://localhost:9090/RemoteObject.rem");
        RemotingConfiguration.RegisterWellKnownClientType(remoteType);

        // Create a message sink.
        string objectUri;
        System.Runtime.Remoting.Messaging.IMessageSink messageSink =
            clientChannel.CreateMessageSink(
                "tcp://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());
    }
}

Das folgende Codebeispiel zeigt das Remoteobjekt, das vom Server und dem Client verwendet wird:

using namespace System;
using namespace System::Runtime::Remoting;

// Remote object.
public ref class RemoteObject: public MarshalByRefObject
{
private:
   int callCount;

public:
   RemoteObject()
      : callCount( 0 )
   {}

   int GetCount()
   {
      callCount++;
      return (callCount);
   }

};
using System;
using System.Runtime.Remoting;

// Remote object.
public class RemoteObject : MarshalByRefObject
{
    private int callCount = 0;

    public int GetCount()
    {
        callCount++;
        return(callCount);
    }
}

Hinweise

Von Bedeutung

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

Kanäle transportieren Nachrichten über Remotinggrenzen hinweg (z. B. zwischen Computern in Anwendungsdomänen). Die TcpChannel Klasse ist eine Komfortklasse, die die Funktionalität der TcpClientChannel Klasse und der TcpServerChannel Klasse kombiniert.

Kanäle werden von der .NET Framework-Remotinginfrastruktur zum Transport von Remoteanrufen verwendet. Wenn ein Client einen Aufruf an ein Remoteobjekt sendet, wird der Aufruf in eine Nachricht serialisiert, die von einem Clientkanal gesendet und von einem Serverkanal empfangen wird. Es wird dann deserialisiert und verarbeitet. Alle zurückgegebenen Werte werden vom Serverkanal übertragen und vom Clientkanal empfangen.

Um eine zusätzliche Verarbeitung von Nachrichten durchzuführen, können Sie Implementierungen der IClientChannelSinkProvider und IServerChannelSinkProvider über die alle nachrichten, die von der TcpChannel Nachricht verarbeitet werden, angeben.

Ein TcpChannel 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 TcpChannel Konstruktor) festgelegt werden können.

Konstruktoren

Name Beschreibung
TcpChannel()

Initialisiert eine neue Instanz der TcpChannel Klasse, wobei nur ein Clientkanal und kein Serverkanal aktiviert wird.

TcpChannel(IDictionary, IClientChannelSinkProvider, IServerChannelSinkProvider)

Initialisiert eine neue Instanz der TcpChannel Klasse mit den angegebenen Konfigurationseigenschaften und Senken.

TcpChannel(Int32)

Initialisiert eine neue Instanz der TcpChannel Klasse mit einem Serverkanal, der auf den angegebenen Port lauscht.

Eigenschaften

Name Beschreibung
ChannelData

Ruft die kanalspezifischen Daten ab.

ChannelName

Ruft den Namen des aktuellen Kanals ab.

ChannelPriority

Ruft die Priorität des aktuellen Kanals ab.

IsSecured

Dient zum Abrufen oder Festlegen eines booleschen Werts, der angibt, ob der aktuelle Kanal sicher ist.

Methoden

Name Beschreibung
CreateMessageSink(String, Object, String)

Gibt eine Kanalnachrichtensenke zurück, die Nachrichten an das angegebene URL- oder Kanaldatenobjekt übermittelt.

Equals(Object)

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

(Geerbt von Object)
GetHashCode()

Dient als die Standard-Hashfunktion

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
GetUrlsForUri(String)

Gibt ein Array aller URLs für ein Objekt mit dem angegebenen URI zurück, der auf der aktuellen TcpChannelWebsite gehostet wird.

MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
Parse(String, String)

Extrahiert den Kanal-URI und den bekannten Remoteobjekt-URI aus der angegebenen URL.

StartListening(Object)

Weist den aktuellen Kanal an, mit der Überwachung auf Anforderungen zu beginnen.

StopListening(Object)

Weist den aktuellen Kanal an, die Überwachung auf Anforderungen zu beenden.

ToString()

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

(Geerbt von Object)

Gilt für: