HttpServerChannel Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Implementiert einen Serverkanal für Remoteaufrufe, die das HTTP-Protokoll zum Übertragen von Nachrichten verwenden.
public ref class HttpServerChannel : System::Runtime::Remoting::Channels::BaseChannelWithProperties, System::Runtime::Remoting::Channels::IChannelReceiver, System::Runtime::Remoting::Channels::IChannelReceiverHook
public class HttpServerChannel : System.Runtime.Remoting.Channels.BaseChannelWithProperties, System.Runtime.Remoting.Channels.IChannelReceiver, System.Runtime.Remoting.Channels.IChannelReceiverHook
type HttpServerChannel = class
inherit BaseChannelWithProperties
interface IChannelReceiver
interface IChannel
interface IChannelReceiverHook
Public Class HttpServerChannel
Inherits BaseChannelWithProperties
Implements IChannelReceiver, IChannelReceiverHook
- Vererbung
- Implementiert
Beispiele
Das folgende Codebeispiel zeigt, wie Ein HttpServerChannel Objekt zum Einrichten eines Remotingservers und seines Clients verwendet wird. Das Beispiel enthält drei Teile:
Ein Server
Ein Client
Ein Remoteobjekt, das vom Server und dem Client verwendet wird
Das folgende Codebeispiel zeigt einen Server.
#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;
int main()
{
// Create the server channel.
HttpServerChannel^ serverChannel = gcnew HttpServerChannel( 9090 );
// Register the server channel.
ChannelServices::RegisterChannel( serverChannel );
// Display the channel's scheme.
Console::WriteLine( L"The channel scheme is {0}.", serverChannel->ChannelScheme );
// Display the channel's URI.
Console::WriteLine( L"The channel URI is {0}.", serverChannel->GetChannelUri() );
// Expose an object for remote calls.
RemotingConfiguration::RegisterWellKnownServiceType(
RemoteObject::typeid, L"RemoteObject.rem", WellKnownObjectMode::Singleton );
// Get the channel's sink chain.
IServerChannelSink^ sinkChain = serverChannel->ChannelSinkChain;
Console::WriteLine( L"The type of the server channel's sink chain is {0}.", sinkChain->GetType() );
// See if the channel wants to listen.
bool wantsToListen = serverChannel->WantsToListen;
Console::WriteLine( L"The value of WantsToListen is {0}.", wantsToListen );
// 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;
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);
// Display the channel's scheme.
Console.WriteLine("The channel scheme is {0}.",
serverChannel.ChannelScheme);
// Display the channel's URI.
Console.WriteLine("The channel URI is {0}.",
serverChannel.GetChannelUri());
// Expose an object for remote calls.
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(RemoteObject), "RemoteObject.rem",
WellKnownObjectMode.Singleton);
// Get the channel's sink chain.
IServerChannelSink sinkChain = serverChannel.ChannelSinkChain;
Console.WriteLine(
"The type of the server channel's sink chain is {0}.",
sinkChain.GetType().ToString());
// See if the channel wants to listen.
bool wantsToListen = serverChannel.WantsToListen;
Console.WriteLine(
"The value of WantsToListen is {0}.",
wantsToListen);
// 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.");
}
}
Das folgende Codebeispiel zeigt einen Client für diesen Server.
#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^ channel = gcnew HttpClientChannel;
// Register the channel.
ChannelServices::RegisterChannel( channel );
// Register as client for remote object.
WellKnownClientTypeEntry^ remoteType = gcnew WellKnownClientTypeEntry(
RemoteObject::typeid,L"http://localhost:9090/RemoteObject.rem" );
RemotingConfiguration::RegisterWellKnownClientType( remoteType );
// 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;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
public class Client
{
public static void Main(string[] args)
{
// Create the channel.
HttpClientChannel channel = new HttpClientChannel();
// Register the channel.
ChannelServices.RegisterChannel(channel);
// Register as client for remote object.
WellKnownClientTypeEntry remoteType = new WellKnownClientTypeEntry(
typeof(RemoteObject),"http://localhost:9090/RemoteObject.rem");
RemotingConfiguration.RegisterWellKnownClientType(remoteType);
// 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:
static int callCount = 0;
public:
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
Kanäle transportieren Nachrichten über Remotinggrenzen hinweg (z. B. zwischen Computern in Anwendungsdomänen). Die HttpServerChannel Klasse transportiert Nachrichten mithilfe des HTTP-Protokolls.
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 auf serverseitiger Seite durchzuführen, können Sie eine Implementierung der Implementierung angeben, über die IServerChannelSinkProvider alle nachrichten, die von der HttpServerChannel Nachricht verarbeitet werden, übergeben werden.
Die HttpServerChannel nachrichten werden im binär- oder SOAP-Format serialisiert.
Ein HttpServerChannel 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 HttpServerChannel Konstruktor) festgelegt werden können. Eine Liste dieser Konfigurationseigenschaften finden Sie in der Dokumentation für HttpServerChannel.
Konstruktoren
| Name | Beschreibung |
|---|---|
| HttpServerChannel() |
Initialisiert eine neue Instanz der HttpServerChannel-Klasse. |
| HttpServerChannel(IDictionary, IServerChannelSinkProvider) |
Initialisiert eine neue Instanz der HttpServerChannel Klasse mit den angegebenen Kanaleigenschaften und sinken. |
| HttpServerChannel(Int32) |
Initialisiert eine neue Instanz der HttpServerChannel Klasse, die auf den angegebenen Port lauscht. |
| HttpServerChannel(String, Int32, IServerChannelSinkProvider) |
Initialisiert eine neue Instanz der HttpServerChannel Klasse am angegebenen Port mit dem angegebenen Namen, der auf den angegebenen Port lauscht, und verwendet die angegebene Spüle. |
| HttpServerChannel(String, Int32) |
Initialisiert eine neue Instanz der HttpServerChannel Klasse mit dem angegebenen Namen und überwacht den angegebenen Port. |
Felder
| Name | Beschreibung |
|---|---|
| SinksWithProperties |
Gibt die obere Kanalspüle im Kanal-Senkenstapel an. (Geerbt von BaseChannelWithProperties) |
Eigenschaften
| Name | Beschreibung |
|---|---|
| ChannelData |
Ruft kanalspezifische Daten ab. |
| ChannelName |
Ruft den Namen des aktuellen Kanals ab. |
| ChannelPriority |
Ruft die Priorität des aktuellen Kanals ab. |
| ChannelScheme |
Ruft den Typ des Listeners ab, mit dem ein Hook ausgeführt werden soll (z. B. "http"). |
| ChannelSinkChain |
Ruft die Kanalsenkenkette ab, die der aktuelle Kanal verwendet. |
| Count |
Ruft die Anzahl der Eigenschaften ab, die dem Kanalobjekt zugeordnet sind. (Geerbt von BaseChannelObjectWithProperties) |
| IsFixedSize |
Ruft einen Wert ab, der angibt, ob die Anzahl der Eigenschaften, die in das Kanalobjekt eingegeben werden können, behoben ist. (Geerbt von BaseChannelObjectWithProperties) |
| IsReadOnly |
Ruft einen Wert ab, der angibt, ob die Auflistung von Eigenschaften im Kanalobjekt schreibgeschützt ist. (Geerbt von BaseChannelObjectWithProperties) |
| IsSynchronized |
Ruft einen Wert ab, der angibt, ob das Wörterbuch der Kanalobjekteigenschaften synchronisiert wird. (Geerbt von BaseChannelObjectWithProperties) |
| Item[Object] |
Gibt die angegebene Kanaleigenschaft zurück. |
| Keys |
Ruft einen ICollection Schlüssel ab, dem die Kanaleigenschaften zugeordnet sind. |
| Properties |
Ruft eine IDictionary der Kanaleigenschaften ab, die dem aktuellen Kanalobjekt zugeordnet sind. (Geerbt von BaseChannelWithProperties) |
| SyncRoot |
Ruft ein Objekt ab, das zum Synchronisieren des Zugriffs auf die BaseChannelObjectWithProperties. (Geerbt von BaseChannelObjectWithProperties) |
| Values |
Ruft einen ICollection der Werte der Eigenschaften ab, die dem Kanalobjekt zugeordnet sind. (Geerbt von BaseChannelObjectWithProperties) |
| WantsToListen |
Ruft einen booleschen Wert, der angibt, ob IChannelReceiverHook in den externen Listenerdienst eingebunden werden soll. |
Methoden
| Name | Beschreibung |
|---|---|
| Add(Object, Object) |
Löst eine NotSupportedException aus. (Geerbt von BaseChannelObjectWithProperties) |
| AddHookChannelUri(String) |
Fügt einen URI hinzu, auf dem der Kanal-Hook lauschen muss. |
| Clear() |
Löst eine NotSupportedException aus. (Geerbt von BaseChannelObjectWithProperties) |
| Contains(Object) |
Gibt einen Wert zurück, der angibt, ob das Kanalobjekt eine Eigenschaft enthält, die dem angegebenen Schlüssel zugeordnet ist. (Geerbt von BaseChannelObjectWithProperties) |
| CopyTo(Array, Int32) |
Löst eine NotSupportedException aus. (Geerbt von BaseChannelObjectWithProperties) |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
| GetChannelUri() |
Gibt den URI des aktuellen Kanals zurück. |
| GetEnumerator() |
Gibt einen IDictionaryEnumerator Wert zurück, der alle dem Kanalobjekt zugeordneten Eigenschaften aufzählt. (Geerbt von BaseChannelObjectWithProperties) |
| 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 HttpChannelWebsite 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. |
| Remove(Object) |
Löst eine NotSupportedException aus. (Geerbt von BaseChannelObjectWithProperties) |
| 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) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IEnumerable.GetEnumerator() |
Gibt einen IEnumerator Wert zurück, der alle Eigenschaften aufzählt, die dem Kanalobjekt zugeordnet sind. (Geerbt von BaseChannelObjectWithProperties) |
Erweiterungsmethoden
| Name | Beschreibung |
|---|---|
| AsParallel(IEnumerable) |
Aktiviert die Parallelisierung einer Abfrage. |
| AsQueryable(IEnumerable) |
Wandelt eine IEnumerable in eine IQueryableum. |
| Cast<TResult>(IEnumerable) |
Wandelt die Elemente eines IEnumerable in den angegebenen Typ um. |
| OfType<TResult>(IEnumerable) |
Filtert die Elemente einer IEnumerable basierend auf einem angegebenen Typ. |