初学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();
服务端和客户端都引用的类库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();
try
{
System.ServiceProcess.ServiceController service = new ServiceController("服务名");
if (service.Status == ServiceControllerStatus.Running) service.Stop(); // 停止
service.Dispose(); // 同理,也可以控制开启
}
catch { }
方法2 用一个报务,控制不同的线程开启.