在客户端通过RemotingConfiguration.RegisterWellKnownClientType(typeof(LoginManager), "tcp://localhost:8888/LoginManager.soap");注册后,
由于端口从8888改为9999,请问客户端程序如何实现不重新启动而注册为新的端口呢?

解决方案 »

  1.   

     public string GetSingleCallObject(string objectUri)
            {
                for (int i = 0; i < RemotingConfiguration.GetRegisteredWellKnownClientTypes().Length; i++)
                {
                    if (RemotingConfiguration.GetRegisteredWellKnownClientTypes()[i].ObjectUrl == objectUri)
                    {
                        ChannelDataStore cds = null;
                        TcpChannel tc = (TcpChannel)ChannelServices.RegisteredChannels[i];
                        cds = (ChannelDataStore)tc.ChannelData;
                        return cds.ChannelUris[0];
                    }
                    return null;
                }
                return null;
            }
      

  2.   

    你要注意判断ChannelServices.RegisteredChannels[i].ChannelName是什么。这里只是假设是Tcp,有可能是http或者其他的,否则的话在TcpChannel tc = (TcpChannel)ChannelServices.RegisteredChannels[i];会出错,
    cds.ChannelUris[0];
    返回的是类似这样的"tcp://localhost:8888/",即可查出你要参入的objectUri即你的"LoginManager.soap"
      

  3.   

    ojekleen 好,我不需要查出LoginManager.soap,而是相当于要再执行RemotingConfiguration.RegisterWellKnownClientType(typeof(LoginManager), "tcp://localhost:9999/LoginManager.soap");,从而把前面的注册替换为新的注册
      

  4.   

    shao99兄,不是很明白你的意思,我以为你是:在不知道loginmanager对象在什么端口注册了。
    现在理解为你还没有注册,只是想通过RemotingConfiguration.RegisterWellKnownClientType(typeof(LoginManager), "tcp://localhost:9999/LoginManager.soap");来获取对象。
    你可以获取之前直接注册9999端口啊。这样就行了啊
      

  5.   

    ojekleen好,可是对于LoginManager我已经注册过8888的端口了,现在需要在客户端动态把注册端口调整到9999,不知有什么好办法?