この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

IpcChannel クラス

 

公開日: 2016年10月

IPC プロトコルを使用してメッセージを送信するチャネルの実装を提供します。

名前空間:   System.Runtime.Remoting.Channels.Ipc
アセンブリ:  System.Runtime.Remoting (System.Runtime.Remoting.dll 内)

System.Object
  System.Runtime.Remoting.Channels.Ipc.IpcChannel

public class IpcChannel : IChannelReceiver, IChannel, IChannelSender, 
	ISecurableChannel

名前説明
System_CAPS_pubmethodIpcChannel()

新しいインスタンスを初期化、 IpcChannel クラスをアクティブにするクライアント チャネルとサーバー チャネルではありません。

System_CAPS_pubmethodIpcChannel(IDictionary, IClientChannelSinkProvider, IServerChannelSinkProvider)

新しいインスタンスを初期化、 IpcChannel クラスが指定された構成プロパティとシンクを使用します。

System_CAPS_pubmethodIpcChannel(IDictionary, IClientChannelSinkProvider, IServerChannelSinkProvider, CommonSecurityDescriptor)

新しいインスタンスを初期化、 IpcChannel クラスが指定された構成プロパティとシンクを使用します。

System_CAPS_pubmethodIpcChannel(String)

新しいインスタンスを初期化、 IpcChannel サーバー チャネルは、指定された IPC ポートでリッスンを持つクラス。

名前説明
System_CAPS_pubpropertyChannelData

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

System_CAPS_pubpropertyChannelName

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

System_CAPS_pubpropertyChannelPriority

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

System_CAPS_pubpropertyIsSecured

取得または現在のチャネルがセキュリティで保護するかどうかを示すブール値を設定します。

名前説明
System_CAPS_pubmethodCreateMessageSink(String, Object, String)

指定した URL またはチャネル データ オブジェクトにメッセージを配信するチャネル メッセージ シンクが返されます。

System_CAPS_pubmethodEquals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。(Object から継承されます。)

System_CAPS_protmethodFinalize()

オブジェクトが、ガベージ コレクションによって収集される前に、リソースの解放とその他のクリーンアップ操作の実行を試みることができるようにします。(Object から継承されます。)

System_CAPS_pubmethodGetHashCode()

既定のハッシュ関数として機能します。(Object から継承されます。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_pubmethodGetUrlsForUri(String)

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

System_CAPS_protmethodMemberwiseClone()

現在の Object の簡易コピーを作成します。(Object から継承されます。)

System_CAPS_pubmethodParse(String, String)

チャネル URI とリモートのよく知られているオブジェクトの URI を指定された URL から抽出します。

System_CAPS_pubmethodStartListening(Object)

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

System_CAPS_pubmethodStopListening(Object)

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

System_CAPS_pubmethodToString()

現在のオブジェクトを表す文字列を返します。(Object から継承されます。)

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

IpcChannel クラスは、の機能を組み合わせるための便利なクラス、 IpcClientChannel クラスおよび IpcServerChannel クラスです。

System_CAPS_caution注意

設定する場合、 exclusiveAddressUse プロパティを false で、 properties 引数、いくつか IpcServerChannel 同じ名前付きパイプのオブジェクトを登録することができます。 このような場合は、要求が登録されているチャネルのいずれかに移動できます。 この設定は、Alc も使用されている場合にのみセキュリティで保護されたと見なされます。

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

  • サーバー

  • クライアント

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

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

using System;
using System.Runtime.Remoting.Channels.Ipc;
using System.Security.Permissions;

public class Server
{
[SecurityPermission(SecurityAction.Demand)]
    public static void Main(string[] args)
    {
        // Create the server channel.
        IpcChannel serverChannel = 
            new IpcChannel("localhost:9090"); 

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

        // Expose an object for remote calls.
        System.Runtime.Remoting.RemotingConfiguration.
            RegisterWellKnownServiceType(
                typeof(RemoteObject), "RemoteObject.rem", 
                System.Runtime.Remoting.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 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;
using System.Runtime.Remoting.Channels.Ipc;
using System.Security.Permissions;

public class Client
{
[SecurityPermission(SecurityAction.Demand)]
    public static void Main(string[] args)
    {
        // Create the channel.
        IpcChannel channel = new IpcChannel();

        // Register the channel.
        System.Runtime.Remoting.Channels.ChannelServices.
            RegisterChannel(channel);

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

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

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

using System;

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

    public int GetCount()
    {
        Console.WriteLine("GetCount has been called.");
        callCount++;
        return(callCount);
    }
}

.NET Framework
2.0 以降で使用可能

この型のパブリック static (Visual Basic では Shared ) メンバーはスレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

トップに戻る
表示: