分类广告


推荐文章

  • 没有找到任何内容!
您当前的位置:中国站长下载网络编程NET专区 → 文章内容

Microsoft .Net Remoting系列专题之三:Remoting事件处理全接触2

  • 作者:佚名    来源:不详    发布时间:2007-6-30 10:22:08
  • 字体大小:
     我们在加载窗体的时候,注册通道和远程对象:
  private void ServerForm_Load(object sender, System.EventArgs e)


  {
   HttpChannel channel = new HttpChannel(8080);
   ChannelServices.ReGISterChannel(channel);
  
   RemotingConfiguration.ReGISterWellKnownServiceType(
   typeof(FaxBusiness),"FaxBusiness.soap",WellKnownObjectMode.Singleton);
   FaxBusiness.FaxSendedEvent += new FaxEventHandler(OnFaxSended);
  }
  
  我们采用的是SingleTon模式,注册了一个远程对象。注意看,这段代码和一般的Remoting服务端有什么区别?对了,它多了一行注册事件的代码:
  FaxBusiness.FaxSendedEvent += new FaxEventHandler(OnFaxSended);
  这行代码,就好比我们服务端的传真机,一直切换为“自动”模式。它会一直监听着来自客户端的传真信息,一旦传真信息从客户端发过来了,则响应事件方法,即OnFaxSended方法:
  public void OnFaxSended(string fax)
  {
   txtFax.Text += fax;
   txtFax.Text += System.Environment.NewLine;
  }
  这个方法很简单,就是把客户端发过来的Fax显示到txtFax文本框控件上。
  
  而客户端呢?仍然是一个Windows应用程序。代码非常简单,首先为了简便其见,我们仍然让它在装载窗体的时候,激活远程对象:
  private void ClientForm_Load(object sender, System.EventArgs e)
  {
   HttpChannel channel = new HttpChannel(0);
   ChannelServices.RegisterChannel(channel);
  
   faxBus = (IFaxBusiness)Activator.GetObject(typeof(IFaxBusiness),
   "http://localhost:8080/FaxBusiness.soap");
  }
  呵呵,可以说客户端激活对象的方法和普通的Remoting客户端应用程序没有什么不同。该写传真了!我们在窗体上放一个文本框对象,改其Multiline属性为true。再放一个按钮,负责发送传真:
  private void btnSend_Click(object sender, System.EventArgs e)
  {
   if (txtFax.Text != String.Empty)
   {
   string fax = "来自" + GetIpAddress() + "客户端的传真:"
  + System.Environment.NewLine;
   fax += txtFax.Text;
   faxBus.SendFax(fax);
   }
   else
   {
   MessageBox.Show("请输入传真内容!");
   }
  }
  
  private string GetIpAddress()
  {
   IPHostEntry ipHE = Dns.GetHostByName(Dns.GetHostName());
   return ipHE.AddressList[0].ToString();
  }
  
  在这个按钮单击事件中,只需要调用远程对象faxBus的SendFax()方法就OK了,非常简单。可是慢着,为什么你的代码有这么多行啊?其实,没有什么奇怪的,我只是想到发传真的客户可能会很多。为了避免服务端人员犯糊涂,搞不清楚是谁发的,所以要求在传真上加上各自的签名,也就是客户端的IP地址了。既然要获得计算机的IP地址,请一定要记得加上对DNS的命名空间引用:
  using System.net;
  
  因为我们严格按照分布式处理程序的部署方式,所以在客户端只需要添加公共程序集(Common.dll)的引用就可以了。而在服务端呢,则必须添加公共程序集和远程对象程序集两者的引用。
  
  OK,程序完成,我们来看看这个简陋的传真机:
  客户端: