3

我想知道是否可以将远程服务器上的知名服务注册到特定频道而不是所有可用频道。

我的代码如下:

我使用以下代码在远程服务器上创建了 2 个单独的 tcpchannels

IDictionary rcProperties1 = new Hashtable();
rcProperties1["port"] = "1688";
rcProperties1["name"] = "tcp1";
TcpChannel tcp1 = new TcpChannel(rcProperties1, null, null);

IDictionary rcProperties2 = new Hashtable();
rcProperties2["port"] = "1689";
rcProperties2["name"] = "tcp2";
TcpChannel tcp2 = new TcpChannel(rcProperties2, null, null);

//--------------------------------------------------
// Register tcp channels
//--------------------------------------------------
ChannelServices.RegisterChannel(tcp1, false);
ChannelServices.RegisterChannel(tcp2, false);

然后我使用以下内容托管了 2 个远程对象

Type rt = typeof(wxMessage);
RemotingConfiguration.RegisterWellKnownServiceType(
        rt, "Classes/wxMessage.rem", WellKnownObjectMode.Singleton);

rt = typeof(wxType);
RemotingConfiguration.RegisterWellKnownServiceType(
        rt, "Classes/wxType.rem", WellKnownObjectMode.Singleton);

在客户端,我通过 Activator.GetObject(...) 调用远程对象

string uri = "tcp://localhost:1688/";

IConcrete1 objMessageRemote = (IConcrete1)Activator.GetObject(
        typeMessageLocal, uri + "Classes/wxMessage.rem");

IConcrete2 objTypeRemote = (IConcrete2)Activator.GetObject(
        typeTypeLocal, uri + "Classes/wxType.rem");

问题是,无论我将 uri 端口设置为 1688 还是 1689,我仍然可以检索远程对象。

我想要做的是让服务器在一个频道上托管某个对象,在另一个频道上托管一个不同的对象。这可以做到吗?

4

0 回答 0