Freigeben über


HttpServerChannel-Klasse

Implementiert einen Serverchannel 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 HttpServerChannel
    Inherits BaseChannelWithProperties
    Implements IChannelReceiver, IChannel, IChannelReceiverHook
'Usage
Dim instance As HttpServerChannel
public class HttpServerChannel : BaseChannelWithProperties, IChannelReceiver, IChannel, IChannelReceiverHook
public ref class HttpServerChannel : public BaseChannelWithProperties, IChannelReceiver, IChannel, IChannelReceiverHook
public class HttpServerChannel extends BaseChannelWithProperties implements IChannelReceiver, IChannel, 
    IChannelReceiverHook
public class HttpServerChannel extends BaseChannelWithProperties implements IChannelReceiver, IChannel, 
    IChannelReceiverHook

Hinweise

Channels transportieren Meldungen über Remotinggrenzen hinweg (z. B. zwischen Computern in Anwendungsdomänen). Die HttpServerChannel-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.

Um eine zusätzliche Verarbeitung von Meldungen auf Serverseite auszuführen, können Sie eine Implementierung des IServerChannelSinkProvider angeben, den alle vom HttpServerChannel verarbeiteten Meldungen durchlaufen.

Der HttpServerChannel akzeptiert in binärem oder SOAP-Format serialisierte Meldungen.

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 das Übergeben einer IDictionary-Auflistung an den HttpServerChannel-Konstruktor) festgelegt werden können. Eine Liste dieser Konfigurationseigenschaften finden Sie in der Dokumentation für HttpServerChannel.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie ein HttpServerChannel-Objekt 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;
using System.Security.Permissions;

public class Server
{
[SecurityPermission(SecurityAction.Demand)]
    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.");
    }
}
#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." );
}

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;

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),"https://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());
    }
}
#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"https://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() );
}

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()
    {
        callCount++;
        return(callCount);
    }

}
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);
   }

};

Vererbungshierarchie

System.Object
   System.Runtime.Remoting.Channels.BaseChannelObjectWithProperties
     System.Runtime.Remoting.Channels.BaseChannelWithProperties
      System.Runtime.Remoting.Channels.Http.HttpServerChannel

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

HttpServerChannel-Member
System.Runtime.Remoting.Channels.Http-Namespace

Weitere Ressourcen

Konfigurationseigenschaften für Channel und Formatierungsprogramme