从已使用远程处理运行的服务返回一个字符串

时间:2012-08-21 18:18:14

标签: c# windows-services remoting

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

2 个答案:

答案 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;
}