HttpChannel-Klasse
Implementiert einen Clientchannel für Remoteaufrufe, der das HTTP-Protokoll zum Übertragen von Meldungen verwendet.
Namespace: System.Runtime.Remoting.Channels.Http
Assembly: System.Runtime.Remoting (in system.runtime.remoting.dll)
Syntax
'Declaration
Public Class HttpChannel
Inherits BaseChannelWithProperties
Implements IChannelReceiver, IChannelSender, IChannel, IChannelReceiverHook, _
ISecurableChannel
'Usage
Dim instance As HttpChannel
public class HttpChannel : BaseChannelWithProperties, IChannelReceiver, IChannelSender, IChannel,
IChannelReceiverHook, ISecurableChannel
public ref class HttpChannel : public BaseChannelWithProperties, IChannelReceiver, IChannelSender, IChannel,
IChannelReceiverHook, ISecurableChannel
public class HttpChannel extends BaseChannelWithProperties implements IChannelReceiver, IChannelSender,
IChannel, IChannelReceiverHook, ISecurableChannel
public class HttpChannel extends BaseChannelWithProperties implements IChannelReceiver, IChannelSender,
IChannel, IChannelReceiverHook, ISecurableChannel
Hinweise
Channels transportieren Meldungen über Remotinggrenzen hinweg (z. B. zwischen Computern oder Anwendungsdomänen). Die HttpChannel-Klasse transportiert Meldungen mithilfe des HTTP-Protokolls.
Channels werden von der .NET Framework Remoting-Infrastruktur verwendet, um Remoteaufrufe zu transportieren. Wenn ein Client ein Remoteobjekt aufruft, wird der Aufruf in eine Meldung serialisiert, die von einem Clientchannel gesendet und von einem Serverchannel empfangen wird. Anschließend erfolgt die Deserialisierung und Verarbeitung. Alle zurückgegebenen Werte werden vom Serverchannel gesendet und vom Clientchannel empfangen.
Ein HttpChannel-Objekt verfügt über zugeordnete Konfigurationseigenschaften, die zur Laufzeit entweder in einer Konfigurationsdatei (durch Aufrufen der statischen RemotingConfiguration.Configure-Methode) oder programmgesteuert (durch das Übergeben einer IDictionary-Auflistung an den HttpChannel-Konstruktor) festgelegt werden können. Eine Liste mit diesen Konfigurationseigenschaften finden Sie unter Konfigurationseigenschaften für Channel und Formatierungsprogramme.
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie ein HttpClientChannel verwendet wird, um einen Remotingserver und dessen Client einzurichten. Das Beispiel besteht aus drei Teilen:
Einem Server
Einem Client
Einem vom Server und vom Client verwendeten Remoteobjekt
Im folgenden Codebeispiel wird ein Server veranschaulicht.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
public class Server
{
public static void Main(string[] args)
{
// Create the server channel.
HttpServerChannel serverChannel = new HttpServerChannel(9090);
// Register the server channel.
ChannelServices.RegisterChannel(serverChannel);
// Expose an object for remote calls.
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(RemoteObject), "RemoteObject.rem",
WellKnownObjectMode.Singleton);
// Wait for the user prompt.
Console.WriteLine("Press ENTER to exit the server.");
Console.ReadLine();
Console.WriteLine("The server is exiting.");
}
}
#using <System.dll>
#using <System.Runtime.Remoting.dll>
#using "common.dll"
using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Channels::Http;
void main()
{
// Create the server channel.
HttpServerChannel^ serverChannel = gcnew HttpServerChannel( 9090 );
// Register the server channel.
ChannelServices::RegisterChannel( serverChannel );
// Expose an object for remote calls.
RemotingConfiguration::RegisterWellKnownServiceType( RemoteObject::typeid, L"RemoteObject.rem", WellKnownObjectMode::Singleton );
// Wait for the user prompt.
Console::WriteLine( L"Press ENTER to exit the server." );
Console::ReadLine();
Console::WriteLine( L"The server is exiting." );
}
Im folgenden Codebeispiel wird ein Client für diesen Server veranschaulicht.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using System.Security.Permissions;
public class Client
{
[SecurityPermission(SecurityAction.Demand)]
public static void Main(string[] args)
{
// Create the channel.
HttpClientChannel clientChannel = new HttpClientChannel();
// Register the channel.
ChannelServices.RegisterChannel(clientChannel);
// Register as client for remote object.
WellKnownClientTypeEntry remoteType =
new WellKnownClientTypeEntry(typeof(RemoteObject),
"https://localhost:9090/RemoteObject.rem");
RemotingConfiguration.RegisterWellKnownClientType(remoteType);
// Create a message sink.
string objectUri;
System.Runtime.Remoting.Messaging.IMessageSink messageSink =
clientChannel.CreateMessageSink(
"https://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());
}
// Display the channel's properties using Keys and Item.
foreach(string key in clientChannel.Keys)
{
Console.WriteLine(
"clientChannel[{0}] = <{1}>",
key, clientChannel[key]);
}
// Parse the channel's URI.
string objectUrl = "https://localhost:9090/RemoteObject.rem";
string channelUri = clientChannel.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);
// 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());
}
}
#using <System.dll>
#using <System.Runtime.Remoting.dll>
#using "common.dll"
using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Channels::Http;
void main()
{
// Create the channel.
HttpClientChannel^ clientChannel = gcnew HttpClientChannel;
// Register the channel.
ChannelServices::RegisterChannel( clientChannel );
// Register as client for remote object.
WellKnownClientTypeEntry^ remoteType = gcnew WellKnownClientTypeEntry( RemoteObject::typeid,L"https://localhost:9090/RemoteObject.rem" );
RemotingConfiguration::RegisterWellKnownClientType( remoteType );
// Create a message sink.
String^ objectUri;
System::Runtime::Remoting::Messaging::IMessageSink^ messageSink = clientChannel->CreateMessageSink( L"https://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() );
}
// Display the channel's properties using Keys and Item.
for each(String^ key in clientChannel->Keys)
{
Console::WriteLine("clientChannel[{0}] = <{1}>", key, clientChannel[key]);
}
// Parse the channel's URI.
String^ objectUrl = L"https://localhost:9090/RemoteObject.rem";
String^ channelUri = clientChannel->Parse( objectUrl, objectUri );
Console::WriteLine( L"The object URL is {0}.", objectUrl );
Console::WriteLine( L"The object URI is {0}.", objectUri );
Console::WriteLine( L"The channel URI is {0}.", channelUri );
// 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() );
}
Im folgenden Codebeispiel wird das von Server und Client verwendete Remoteobjekt veranschaulicht.
using System;
using System.Runtime.Remoting;
// Remote object.
public class RemoteObject : MarshalByRefObject
{
private int callCount = 0;
public int GetCount()
{
Console.WriteLine("GetCount was called.");
callCount++;
return(callCount);
}
}
#using <System.dll>
using namespace System;
using namespace System::Runtime::Remoting;
// Remote object.
public ref class RemoteObject: public MarshalByRefObject
{
private:
static int callCount = 0;
public:
int GetCount()
{
Console::WriteLine( L"GetCount was called." );
callCount++;
return (callCount);
}
};
Vererbungshierarchie
System.Object
System.Runtime.Remoting.Channels.BaseChannelObjectWithProperties
System.Runtime.Remoting.Channels.BaseChannelWithProperties
System.Runtime.Remoting.Channels.Http.HttpChannel
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
HttpChannel-Member
System.Runtime.Remoting.Channels.Http-Namespace
Weitere Ressourcen
Konfigurationseigenschaften für Channel und Formatierungsprogramme