0

同じコンピューター上に私のサービスの複数のインスタンスが存在する可能性があり、それぞれが異なるポート上にあります。

現在のリクエストが送信されたポート番号を取得して区別するにはどうすればよいですか?

明確にするために、クライアントが次のメソッドを呼び出している場合:

class OrdersService : MarshalByRefObject
{
    public void EnqueueOrder(Order order)
    {
        //int port = ??
    }
}

リクエスト元のポート番号が必要です。

PS:IServerChannelSinkインターフェースを実装しようとしましたが、クライアントのURI(/ foo / barなど)とIPアドレスにしかアクセスできません。

ありがとう

4

2 に答える 2

0

これは凶悪であり、あまり一般化されていませんが、うまくいくはずです:

TcpChannel       channel = (TcpChannel)ChannelServices.RegisteredChannels[0];
ChannelDataStore data    = (ChannelDataStore)channel.ChannelData;
string           uri     = data.ChannelUris[0];
int              port    = int.Parse(uri.Substring(uri.LastIndexOf(':')));

System.Runtime.Remoting.dll への参照が必要であり、 、およびusingのが必要であることに注意してください。System.Runtime.Remoting.ChannelsSystem.Runtime.Remoting.Channels.Tcp

もちろん、複数のチャネルが登録されている場合、および/または TCP ではない場合、および/またはチャネルの URI が複数ある場合は、上記のハックジョブよりも優れたコードを作成する必要があります。とにかく、それはあなたにアイデアを与えるはずです。


とにかく、これらの個別のサーバー インスタンスはどのように開始されるのでしょうか。そもそもポートはどうやって選ばれるの?クライアントはどのようにポートを検出しますか? これらの質問への回答により、サーバーのコード内でインスタンスを区別するためのより理想的な方法 (コマンド ラインで渡されるインスタンス識別子など) が明らかになる場合があります。

于 2009-01-11T22:43:42.987 に答える