听说 Remoting可以让服务器主动发出事件······搞了好久· 偶还不懂···· 继续努力····
不多还是稍微学到了一点
服务其端
using
System;
using LiTianPing.DBUtility;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace HelloServer
... {
/**//// <summary>
/// Class1 的摘要说明。
/// </summary>
class HS
...{
/**//// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
...{
//
// TODO: 在此处添加代码以启动应用程序
//
try
...{
TcpServerChannel channel = new TcpServerChannel(8086);
ChannelServices.RegisterChannel(channel);
//Type t = typeof(html.wongteeimage);
//RemotingConfiguration.RegisterWellKnownServiceType(t, "hi", WellKnownObjectMode.SingleCall);
Type t1 = typeof(RemoteHello.Hello);
RemotingConfiguration.RegisterWellKnownServiceType(t1, "hi", WellKnownObjectMode.SingleCall);
Console.WriteLine("hit to exit");
Console.ReadLine();
}
catch (Exception ex)
...{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.Source);
Console.ReadLine();
}
}
}
}
using LiTianPing.DBUtility;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace HelloServer
... {
/**//// <summary>
/// Class1 的摘要说明。
/// </summary>
class HS
...{
/**//// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
...{
//
// TODO: 在此处添加代码以启动应用程序
//
try
...{
TcpServerChannel channel = new TcpServerChannel(8086);
ChannelServices.RegisterChannel(channel);
//Type t = typeof(html.wongteeimage);
//RemotingConfiguration.RegisterWellKnownServiceType(t, "hi", WellKnownObjectMode.SingleCall);
Type t1 = typeof(RemoteHello.Hello);
RemotingConfiguration.RegisterWellKnownServiceType(t1, "hi", WellKnownObjectMode.SingleCall);
Console.WriteLine("hit to exit");
Console.ReadLine();
}
catch (Exception ex)
...{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.Source);
Console.ReadLine();
}
}
}
}
客户端
using
System;
using LiTianPing.DBUtility;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace HelloClient
... {
/**//// <summary>
/// Class1 的摘要说明。
/// </summary>
class HC
...{
/**//// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
...{
//
// TODO: 在此处添加代码以启动应用程序
//
try
...{
TcpClientChannel tc = new TcpClientChannel();
ChannelServices.RegisterChannel(tc);
RemoteHello.Hello obj = (RemoteHello.Hello)Activator.GetObject(typeof(RemoteHello.Hello), "tcp://127.0.0.1:8086/hi");
//html.wongteeimage aaa = (html.wongteeimage)Activator.GetObject(typeof(html.wongteeimage), "tcp://127.0.0.1:8086/hi");
//RemoteHello.Hello obj = (RemoteHello.Hello)Activator.GetObject(typeof(RemoteHello.Hello), "tcp://127.0.0.1:8086/hi");
Console.WriteLine(obj.Greeting("hei"));
}
catch (Exception ex)
...{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.Source);
Console.ReadLine();
}
}
}
}
using LiTianPing.DBUtility;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace HelloClient
... {
/**//// <summary>
/// Class1 的摘要说明。
/// </summary>
class HC
...{
/**//// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
...{
//
// TODO: 在此处添加代码以启动应用程序
//
try
...{
TcpClientChannel tc = new TcpClientChannel();
ChannelServices.RegisterChannel(tc);
RemoteHello.Hello obj = (RemoteHello.Hello)Activator.GetObject(typeof(RemoteHello.Hello), "tcp://127.0.0.1:8086/hi");
//html.wongteeimage aaa = (html.wongteeimage)Activator.GetObject(typeof(html.wongteeimage), "tcp://127.0.0.1:8086/hi");
//RemoteHello.Hello obj = (RemoteHello.Hello)Activator.GetObject(typeof(RemoteHello.Hello), "tcp://127.0.0.1:8086/hi");
Console.WriteLine(obj.Greeting("hei"));
}
catch (Exception ex)
...{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.Source);
Console.ReadLine();
}
}
}
}
他们之间都需要调用的类 注意继承 System.MarshalByRefObject
using
System;
namespace RemoteHello
... {
/**//// <summary>
/// Hello 的摘要说明。
/// </summary>
public class Hello : System.MarshalByRefObject
...{
public Hello()
...{
//
// TODO: 在此处添加构造函数逻辑
//
Console.WriteLine("Constructor called");
}
~Hello()
...{
Console.WriteLine("Destructor called");
}
public string Greeting(string name)
...{
Console.WriteLine("Greeting called");
return "Hello," + name;
}
}
}
namespace RemoteHello
... {
/**//// <summary>
/// Hello 的摘要说明。
/// </summary>
public class Hello : System.MarshalByRefObject
...{
public Hello()
...{
//
// TODO: 在此处添加构造函数逻辑
//
Console.WriteLine("Constructor called");
}
~Hello()
...{
Console.WriteLine("Destructor called");
}
public string Greeting(string name)
...{
Console.WriteLine("Greeting called");
return "Hello," + name;
}
}
}
然后生成 exe 现启动 server 然后启动client;即可