【问题标题】:Return a string from a Service already running using Remoting从已使用 Remoting 运行的服务返回字符串
【发布时间】:2012-08-21 18:18:14
【问题描述】:

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

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

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

提前致谢,

米格尔·德·索萨

【问题讨论】:

    标签: c# windows-services remoting


    【解决方案1】:

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

    编辑

    也许你应该阅读一下client activated objects。将您的单例对象转换为类工厂,并返回一个真实工作类的新实例(当然继承自 MarshalByRefObject),该实例将由客户端使用。

    所以你的客户会是这样的

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

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

    【讨论】:

    • 但是我想从中获取值的对象已经创建了
    • 好吧,我放弃了,只是放了一个全局变量......不是那么漂亮,但完成了工作。再次感谢
    【解决方案2】:

    好吧,我只是使用了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;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-03
      • 2014-08-24
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多