我写了一个 Remoting 服务,激活方式是 wellknown 的 singleton 模式,现在我想在服务里获取这个激活的远程对象,如何获取呢???请高手指点服务里的代码:RemotingConfiguration.Configure("Host.exe.config",false);
客户端代码:RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile, false);
ConfigPopupService configService = new ConfigPopupService( );//该对象即为远程对象
客户端代码:RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile, false);
ConfigPopupService configService = new ConfigPopupService( );//该对象即为远程对象
1. 用Activator.GetObject从自己开放的Uri上取。
RemotingObject.Server server =(RemotingObject.Server)Activator.GetObject(typeof(RemotingObject.Server), "tcp://localhost:20001/Server");2. 服务端不走配置,自己new直接用 RemotingServices.Marshal
3. 如果你想调用服务端某个方法来广播什么的,可以把这个方法作为static的
RemotingSamples.HelloServer hServer = (RemotingSamples.HelloServer)Activator.GetObject(typeof(RemotingSamples.HelloServer), "tcp://localhost:8056/TestUri");
EventLog.WriteEntry(hServer.TestCount.ToString()); 这是按照你说的第一种方式激活的,没用啊。我用的是配置文件的方式注册的。
我在客户端修改了 TestCount 属性的值,然后服务端却始终是初始值。
是我的思路问题还是其他???
<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>
这个是服务端的配置文件,看有没有神马问题???
一定先后顺序的测试。即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();