C# .net Remoting最简单的例子
C# .net Remoting最简单的例子
服务端:
using System;
using System.Runtime.InteropServices;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting;
//在引用中添加
namespace RemotingTest
{
class Program
{
static void Main(string[] args)
{
try
{
TcpServerChannel server = new TcpServerChannel(4567); //端口
ChannelServices.RegisterChannel(server, false); //注册通道
//客户端每次请求, Singleton是同用一个实例, singlecall是用各个实例
//Singleton和SingleCall都是服务端激活模式(WellKnown模式), 另外还有两种客户端激活模式
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemotingObj.PictureInfo), "MyRemotingService", WellKnownObjectMode.Singleton);
Console.WriteLine("服务正常启动");
}
catch (Exception ex) { Console.WriteLine(ex.ToString() + "失败了!"); }
while (true) { }
}
}
}
//remoting, webservice传送的对像都要新建一个命名空间
//这个可以生成一个dll 在服务和客户端都引用
namespace RemotingObj
{
//[Serializable]只调用方法时可写可不写, 传送对像时要写
public class PictureInfo : MarshalByRefObject
{
public string GetPicinfo(string strName)
{
return "已返回[" + strName + "]的信息";
}
////SingleCall启动例子要重写InitializeLifetimeService函数,
////return null可以使各个实例一直存在 多用在聊天室客户端与服务端相连
//public override object InitializeLifetimeService()
//{
// return null;
//}
}
using System.Runtime.InteropServices;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting;
//在引用中添加
namespace RemotingTest
{
class Program
{
static void Main(string[] args)
{
try
{
TcpServerChannel server = new TcpServerChannel(4567); //端口
ChannelServices.RegisterChannel(server, false); //注册通道
//客户端每次请求, Singleton是同用一个实例, singlecall是用各个实例
//Singleton和SingleCall都是服务端激活模式(WellKnown模式), 另外还有两种客户端激活模式
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemotingObj.PictureInfo), "MyRemotingService", WellKnownObjectMode.Singleton);
Console.WriteLine("服务正常启动");
}
catch (Exception ex) { Console.WriteLine(ex.ToString() + "失败了!"); }
while (true) { }
}
}
}
//remoting, webservice传送的对像都要新建一个命名空间
//这个可以生成一个dll 在服务和客户端都引用
namespace RemotingObj
{
//[Serializable]只调用方法时可写可不写, 传送对像时要写
public class PictureInfo : MarshalByRefObject
{
public string GetPicinfo(string strName)
{
return "已返回[" + strName + "]的信息";
}
////SingleCall启动例子要重写InitializeLifetimeService函数,
////return null可以使各个实例一直存在 多用在聊天室客户端与服务端相连
//public override object InitializeLifetimeService()
//{
// return null;
//}
}
}
客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace Client
{
class Program
{
static void Main(string[] args)
{
ChannelServices.RegisterChannel(new TcpClientChannel(), false); //注册通道
string strRemoteAddress = @"tcp://localhost:4567/MyRemotingService";
RemotingObj.PictureInfo pic = (RemotingObj.PictureInfo)Activator.GetObject(typeof(RemotingObj.PictureInfo), strRemoteAddress);
string str = pic.GetPicinfo("Mypic");
Console.WriteLine("Remoting连结成功...\n" + str);
Console.ReadKey();
}
}
}
namespace RemotingObj
{
public class PictureInfo : MarshalByRefObject
{
public string GetPicinfo(string strName)
{
return "";
}
}
}
using System.Linq;
using System.Text;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace Client
{
class Program
{
static void Main(string[] args)
{
ChannelServices.RegisterChannel(new TcpClientChannel(), false); //注册通道
string strRemoteAddress = @"tcp://localhost:4567/MyRemotingService";
RemotingObj.PictureInfo pic = (RemotingObj.PictureInfo)Activator.GetObject(typeof(RemotingObj.PictureInfo), strRemoteAddress);
string str = pic.GetPicinfo("Mypic");
Console.WriteLine("Remoting连结成功...\n" + str);
Console.ReadKey();
}
}
}
namespace RemotingObj
{
public class PictureInfo : MarshalByRefObject
{
public string GetPicinfo(string strName)
{
return "";
}
}
}