初学Remote,服务端持继的执行一些任务,客户端调用远程方法获取服务端的状态信息或控制服务端启停。下面这样的代码OK吗?
服务端和客户端都引用的类库namespace RemoteLibrary.Server
{
// 客户端调用,显示或控制服务端程序的运行状态,这里显示服务端上记录的时间。
    public class CMyObject : MarshalByRefObject
    {
        public DateTime GetRunDateTime()
        {
            return CServiceCore.RunDateTime;
        }
    }
// 服务端的主要功能,持继的执行一些任务。这里用定时器记录时间。
    public static class CServiceCore
    {
        public static DateTime RunDateTime { get; set; }        private static System.Threading.Timer timer;        public static void InitializeCore()
        {
            CServiceCore.timer = new System.Threading.Timer(new System.Threading.TimerCallback(CServiceCore.timerCallbak), null, 0, 10000);
        }
        private static void timerCallbak(object sender)
        {
            CServiceCore.RunDateTime = DateTime.Now;
        }
    }
}
服务端public FmMain()
        {
            InitializeComponent();
            RemotingConfiguration.Configure("ServerWinapp.exe.config", false);            RemoteLibrary.Server.CServiceCore.InitializeCore();
        }        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(RemoteLibrary.Server.CServiceCore.RunDateTime.ToString());
        }
客户端RemoteLibrary.Server.CMyObject aaa = (RemoteLibrary.Server.CMyObject)Activator.GetObject(typeof(RemoteLibrary.Server.CMyObject), System.Configuration.ConfigurationSettings.AppSettings["ServiceURL"]);
            this.tbResult.Text = aaa.GetRunDateTime().ToString();

解决方案 »

  1.   

    方法1 用两个服务,把控制服务开启的方法写到另一个服务中.
    try
    {
     System.ServiceProcess.ServiceController service = new ServiceController("服务名");
     if (service.Status == ServiceControllerStatus.Running) service.Stop(); // 停止
         service.Dispose();    // 同理,也可以控制开启
    }
    catch { }
    方法2 用一个报务,控制不同的线程开启.