1、什么是.Net Remoting
定义:.Net remoting 是简化网络通讯的技术,底层仍然是TCP等东西
remoting要添加对System.Runtime.Remoting的引用
.net Remoting中走的是二进制数据,因此必须一个描述服务端方法的接口类库。
2、简单使用
1、新建接口项目,定义服务接口。
注意:remoting要添加对System.Runtime.Remoting的引用
2、新建服务器端项目(控制台的,或者WinForm,或者Windows服务等)
定义实现服务接口的类,还要继承继承自MarshalByRefObject类
服务器启动时调用
//注册通道,通过TCP的9999端口对外提供服务
TcpChannel tcpChannel = new TcpChannel(9999);
ChannelServices.RegisterChannel(tcpChannel);
//注册服务:第一个参数为服务的实现类,第二个参数为父母的名字。
RemotingConfiguration.RegisterWellKnownServiceType(typeof(TestServiceImpl),"test", WellKnownObjectMode.Singleton);
注册服务。如果控制台程序,控制不要让程序退出,
//主要目的是不要让服务器退出
while (true)
{
string s = Console.ReadLine();
if (s == "quit")
{
return;
}
}
3、客户端:新建客户端项目,引用服务接口
TcpChannel tcpChannel = new TcpChannel();
ChannelServices.RegisterChannel(tcpChannel, false);
ITestService test = (ITestService)Activator.GetObject(typeof(ITestService), "tcp://127.0.0.1:9999/test");//第一个参数为服务实现的接口,第二个参数为服务的地址:最后一部分是服务在服务器端RegisterWellKnownServiceType时第二个参数的名字
然后就可以调用服务端方法了。
因为.net remoting或者普通SocKet可以走8888,9999。…,不能走80,因为80已经被web服务器占用.基于安全考虑,也尽量不要再防火墙上开新的端口 .我们需要一种走80端口的通讯方式,这个程序就要运行在IIS上.
自己用ashx来做一个所谓的WebService,比较麻烦,请求的时候需要按照协议来拼请求报文,处理请求的时候也要从QueryString中取参数.如果在不知道服务器端要求的报文格式(method=getweather&city=”北京”),那么就无法正确连接