HttpServerChannel クラス

定義

HTTP プロトコルを使用してメッセージを送信するリモート呼び出し用のサーバー チャネルを実装します。

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
継承
実装

次のコード例は、 HttpServerChannel オブジェクトを使用してリモート処理サーバーとそのクライアントを設定する方法を示しています。 この例には、次の 3 つの部分が含まれています。

  • サーバー

  • クライアント

  • サーバーとクライアントによって使用されるリモート オブジェクト

次のコード例は、サーバーを示しています。

#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.");
    }
}

次のコード例は、このサーバーのクライアントを示しています。

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

次のコード例は、サーバーとクライアントで使用されるリモート オブジェクトを示しています。

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

注釈

チャネルは、リモート処理の境界を越えて (たとえば、アプリケーション ドメイン上のコンピューター間で) メッセージを転送します。 HttpServerChannel クラスは、HTTP プロトコルを使用してメッセージを転送します。

チャネルは、リモート呼び出しを転送するために、.NET Framework リモート処理インフラストラクチャによって使用されます。 クライアントがリモート オブジェクトを呼び出すと、その呼び出しは、クライアント チャネルによって送信され、サーバー チャネルによって受信されるメッセージにシリアル化されます。 その後、逆シリアル化されて処理されます。 返された値はすべて、サーバー チャネルによって送信され、クライアント チャネルによって受信されます。

サーバー側でメッセージの追加処理を実行するには、HttpServerChannelによって処理されるすべてのメッセージが渡されるIServerChannelSinkProviderの実装を指定できます。

HttpServerChannelは、バイナリ形式または SOAP 形式でシリアル化されたメッセージを受け入れます。

HttpServerChannel オブジェクトには関連付けられた構成プロパティがあり、実行時に構成ファイル内で (静的RemotingConfiguration.Configure メソッドを呼び出すことによって) またはプログラムによって (HttpServerChannel コンストラクターにIDictionary コレクションを渡すことによって) 設定できます。 これらの構成プロパティの一覧については、 HttpServerChannelのドキュメントを参照してください。

コンストラクター

名前 説明
HttpServerChannel()

HttpServerChannel クラスの新しいインスタンスを初期化します。

HttpServerChannel(IDictionary, IServerChannelSinkProvider)

指定したチャネル プロパティとシンクを使用して、 HttpServerChannel クラスの新しいインスタンスを初期化します。

HttpServerChannel(Int32)

指定したポートでリッスンする HttpServerChannel クラスの新しいインスタンスを初期化します。

HttpServerChannel(String, Int32, IServerChannelSinkProvider)

指定したポートでリッスンし、指定したシンクを使用する、指定したポートで HttpServerChannel クラスの新しいインスタンスを初期化します。

HttpServerChannel(String, Int32)

指定した名前で HttpServerChannel クラスの新しいインスタンスを初期化し、指定したポートでリッスンします。

フィールド

名前 説明
SinksWithProperties

チャネル シンク スタック内の最上位チャネル シンクを示します。

(継承元 BaseChannelWithProperties)

プロパティ

名前 説明
ChannelData

チャネル固有のデータを取得します。

ChannelName

現在のチャネルの名前を取得します。

ChannelPriority

現在のチャネルの優先順位を取得します。

ChannelScheme

フックするリスナーの種類 ("http" など) を取得します。

ChannelSinkChain

現在のチャネルが使用しているチャネル シンク チェーンを取得します。

Count

チャネル オブジェクトに関連付けられているプロパティの数を取得します。

(継承元 BaseChannelObjectWithProperties)
IsFixedSize

チャネル オブジェクトに入力できるプロパティの数が固定されているかどうかを示す値を取得します。

(継承元 BaseChannelObjectWithProperties)
IsReadOnly

チャネル オブジェクト内のプロパティのコレクションが読み取り専用かどうかを示す値を取得します。

(継承元 BaseChannelObjectWithProperties)
IsSynchronized

チャネル オブジェクト プロパティのディクショナリが同期されているかどうかを示す値を取得します。

(継承元 BaseChannelObjectWithProperties)
Item[Object]

指定したチャネル プロパティを返します。

Keys

チャネル プロパティが関連付けられているキーの ICollection を取得します。

Properties

現在のチャネル オブジェクトに関連付けられているチャネル プロパティの IDictionary を取得します。

(継承元 BaseChannelWithProperties)
SyncRoot

BaseChannelObjectWithPropertiesへのアクセスを同期するために使用されるオブジェクトを取得します。

(継承元 BaseChannelObjectWithProperties)
Values

チャネル オブジェクトに関連付けられているプロパティの値の ICollection を取得します。

(継承元 BaseChannelObjectWithProperties)
WantsToListen

外部リスナー サービスにフック IChannelReceiverHook かどうかを示すブール値を取得します。

メソッド

名前 説明
Add(Object, Object)

NotSupportedException をスローします。

(継承元 BaseChannelObjectWithProperties)
AddHookChannelUri(String)

チャネル フックがリッスンする必要がある URI を追加します。

Clear()

NotSupportedException をスローします。

(継承元 BaseChannelObjectWithProperties)
Contains(Object)

チャネル オブジェクトに、指定したキーに関連付けられているプロパティが含まれているかどうかを示す値を返します。

(継承元 BaseChannelObjectWithProperties)
CopyTo(Array, Int32)

NotSupportedException をスローします。

(継承元 BaseChannelObjectWithProperties)
Equals(Object)

指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetChannelUri()

現在のチャネルの URI を返します。

GetEnumerator()

チャネル オブジェクトに関連付けられているすべてのプロパティを列挙する IDictionaryEnumerator を返します。

(継承元 BaseChannelObjectWithProperties)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
GetUrlsForUri(String)

現在の HttpChannelでホストされている、指定した URI を持つオブジェクトのすべての URL の配列を返します。

MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
Parse(String, String)

指定した URL からチャネル URI とリモートの既知のオブジェクト URI を抽出します。

Remove(Object)

NotSupportedException をスローします。

(継承元 BaseChannelObjectWithProperties)
StartListening(Object)

要求のリッスンを開始するように現在のチャネルに指示します。

StopListening(Object)

要求のリッスンを停止するように現在のチャネルに指示します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

明示的なインターフェイスの実装

名前 説明
IEnumerable.GetEnumerator()

チャネル オブジェクトに関連付けられているすべてのプロパティを列挙する IEnumerator を返します。

(継承元 BaseChannelObjectWithProperties)

拡張メソッド

名前 説明
AsParallel(IEnumerable)

クエリの並列化を有効にします。

AsQueryable(IEnumerable)

IEnumerableIQueryableに変換します。

Cast<TResult>(IEnumerable)

IEnumerable の要素を指定した型にキャストします。

OfType<TResult>(IEnumerable)

指定した型に基づいて、IEnumerable の要素をフィルター処理します。

適用対象