我试图使用.Net Remoting来获取我在Windows服务的一个线程中使用的变量的值。
TcpChannel tcpChannel = new TcpChannel(9998);
ChannelServices.RegisterChannel(tcpChannel, false);
Type commonInterfaceType = typeof(MyNameSpace.Core.Engine);
RemotingConfiguration.RegisterWellKnownServiceType(commonInterfaceType,
"CopyFilePercentage",
WellKnownObjectMode.SingleCall);
myEngine = Engine.EngineInstance;
myEngine.Start();
但是每当我使用Client获取该值时,它就会产生一个新线程,返回一个空字符串。
知道为什么会发生这种情况或者我做错了什么?
提前致谢,
Miguel de Sousa
答案 0 :(得分:1)
WellKnownObjectMode.SingleCall
为每次调用创建一个新类实例。试试WellKnownObjectMode.Singleton
修改强>
也许您应该阅读client activated objects。将您的单例对象转换为类工厂,并返回将由客户端使用的真实工作者类(继承自MarshalByRefObject
)的新实例。
所以你的客户将是这样的
var worker = client.GetWorkerClass();
worker.GetSomeData();
并且每个连接都有一个服务器对象(这可能不是正确的术语)。
答案 1 :(得分:0)
好吧,我刚刚使用Global Variable Class并不是我想要的,而是完成了这项工作。
/// <summary>
/// Contains global variables for project.
/// </summary>
public static class GlobalVar
{
/// <summary>
/// Global variable that is constant.
/// </summary>
public const string GlobalString = "Important Text";
/// <summary>
/// Static value protected by access routine.
/// </summary>
static int _globalValue;
/// <summary>
/// Access routine for global variable.
/// </summary>
public static int GlobalValue
{
get
{
return _globalValue;
}
set
{
_globalValue = value;
}
}
/// <summary>
/// Global static field.
/// </summary>
public static bool GlobalBoolean;
}