我写了一个 Remoting 服务,激活方式是 wellknown 的 singleton 模式,现在我想在服务里获取这个激活的远程对象,如何获取呢???请高手指点服务里的代码:RemotingConfiguration.Configure("Host.exe.config",false);
客户端代码:RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile, false);
ConfigPopupService configService = new ConfigPopupService( );//该对象即为远程对象

解决方案 »

  1.   

    可以有3种办法。
    1. 用Activator.GetObject从自己开放的Uri上取。
       RemotingObject.Server server =(RemotingObject.Server)Activator.GetObject(typeof(RemotingObject.Server), "tcp://localhost:20001/Server");2. 服务端不走配置,自己new直接用 RemotingServices.Marshal
       
    3. 如果你想调用服务端某个方法来广播什么的,可以把这个方法作为static的
      

  2.   

    2楼的大侠,我用了你的第一种方式: 
    RemotingSamples.HelloServer hServer = (RemotingSamples.HelloServer)Activator.GetObject(typeof(RemotingSamples.HelloServer), "tcp://localhost:8056/TestUri");
    EventLog.WriteEntry(hServer.TestCount.ToString()); 这是按照你说的第一种方式激活的,没用啊。我用的是配置文件的方式注册的。
    我在客户端修改了 TestCount 属性的值,然后服务端却始终是初始值。
    是我的思路问题还是其他???
      

  3.   

    你的第二种方式我不会用。有示例代码贴出来看看吗?RemotingSamples.HelloServer hServer = new RemotingSamples.HelloServer();我直接这样用 new 也不行,照理来说,应该可以的啊,我设置的是 wellknown 的 Singleton 模式
      

  4.   


    <configuration>
    <application>
    <system.runtime.remoting>
    <service>
    <wellknown 
    mode="Singleton" type="RemotingSamples.HelloServer, General" objectUri="TestUri"
    />
    </service>
    <channels>
    <channel ref="tcp" port="8056" />
    </channels>
    </system.runtime.remoting>
    </application>
    </configuration>
    这个是服务端的配置文件,看有没有神马问题???
      

  5.   

    第一个就可以啊,不知道你怎么测试的。
    一定先后顺序的测试。即Client赋值之后,服务端再打印结果。
    但是属性直接赋值,服务端并没有一个固定的时机打印结果,最简单的办法是用个线程监视这个属性的变化。
    比如:
    服务端:
     string config = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
     RemotingConfiguration.Configure(config);
     
     Console.WriteLine("Server is running...");
     ThreadStart displayData = () =>
     {
         var servObj = Activator.GetObject(typeof(RemotingObjLib.RemotingObj),
                       "tcp://localhost:33000/CallbackSample") as RemotingObjLib.RemotingObj;
         int cnt = 0;
         while (cnt < 500)
         {
             // 每隔1m,检查一下Data属性
             Console.WriteLine("Data:" + servObj.Data);
             Thread.Sleep(1000);
         }
     };
     var thread = new Thread(displayData);
     thread.Start();
     Console.ReadLine();
      

  6.   

    呵呵,你的第一种方法凑效了是我的问题,config文件出的问题。标签写错了谢谢你啊。