一.定义远程对象
继承自MarshalByRefObject
二.创建一个Server端作为宿主
注册通道
注册远程对象
三创建客户端
注册通道
通过URL获取Server端得远程对象的代理
通过代理操作远程对象
例子:
将客户端输入的信息显示在服务器端
远程对象:类库中的一个类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RemotingModel
{
public class Talker:MarshalByRefObject
{
public void Talk(string word)
{
System.Console.WriteLine(word);
}
}
}
服务器端:一个控制台应用程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemotingModel;
namespace RemotingServer
{
class Program
{
static void Main(string[] args)
{
//注册通道
TcpServerChannel channel = new TcpServerChannel("TalkerChannel", 8090);
ChannelServices.RegisterChannel(channel, true);
//注册远程对象
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Talker), "Talker", WellKnownObjectMode.SingleCall);
Console.ReadLine();
}
}
}
客户端:一个窗体应用程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemotingModel;
namespace RemotingClient
{
public partial class Form1 : Form
{
private Talker _talker = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//注册通道
TcpClientChannel chanel = new TcpClientChannel();
ChannelServices.RegisterChannel(chanel, true);
//获取远程对象
_talker=(Talker)Activator.GetObject(typeof(Talker), "tcp://localhost:8090/Talker");
}
private void btnSent_Click(object sender, EventArgs e)
{
//操作远程对象
_talker.Talk(txtWord.Text.Trim());
txtContent.Text = "发送成功" + txtWord.Text;
}
}
}