0

我试图使用 .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();

但似乎每次我使用客户端获取该值时,都会创建一个新线程,返回一个空字符串。

知道为什么会发生这种情况还是我做错了什么?

提前致谢,

米格尔·德索萨

4

2 回答 2

1

WellKnownObjectMode.SingleCall为每个调用创建一个新的类实例。尝试WellKnownObjectMode.Singleton

编辑

也许您应该阅读有关客户端激活对象的信息。将您的单例对象转换为类工厂并返回一个真实工作类的新实例(当然继承自MarshalByRefObject),客户端将使用该实例。

所以你的客户会是这样的

var worker = client.GetWorkerClass();
worker.GetSomeData();

并且每个连接都有一个服务器对象(这可能不是正确的术语)。

于 2012-08-21T18:20:31.053 回答
0

好吧,我只是使用了一个全局变量类,这并不是我真正想要的,而是完成了这项工作。

/// <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;
}
于 2012-08-22T16:56:02.253 回答