• 关于我们关于我们
  • 海口企业网站建设电话0898-66611999 / 66611996 / 66611997
  • 海口企业网站建设电话400-8168-664
硕思科技  >>  建站技术  >> 

.Net Remoting实现定向广播(定向 广播)

作者:海口硕思建站来源:海口网站建设发布时间:2013-12-14 11:34:25

相对于 WebService 来说,采用 .Net Remoting  技术的客户端能够订阅服务器端事件,这个功能简直太棒了。

  如果想利用该技术作一个简单而又典型的应用,信息广播程序是一个不错的选择。以下代码是一个简单的广播程序,当然,它实在太简陋了。

 

  服务端:

  Code
  class Program
  {
  static void Main(string[] args)
  {
  BinaryServerFormatterSinkProvider sfsp = new BinaryServerFormatterSinkProvider();
  sfsp.TypeFilterLevel = TypeFilterLevel.Full;
  Hashtable props = new Hashtable();
  props["port"] = 8086;
  TcpChannel channel = new TcpChannel(props, null, sfsp);
  ChannelServices.RegisterChannel(channel, false);
  SayHello sayHello = new SayHello();
  RemotingServices.Marshal(sayHello, "SayHello");
  Console.ReadKey();
  sayHello.Say("Mike", "Hello, Mike");
  Console.ReadKey();
  sayHello.Say("John", "Hello, John");
  Console.ReadKey();
  }
  }


  客户端:

 

Code
  class Program
  {
  static void Main(string[] args)
  {
  BinaryServerFormatterSinkProvider sfsp = new BinaryServerFormatterSinkProvider();
  sfsp.TypeFilterLevel = TypeFilterLevel.Full;
  Hashtable props = new Hashtable();
  props["port"] = 0;
  TcpChannel channel = new TcpChannel(props, null, sfsp);
  ChannelServices.RegisterChannel(channel, false);
  SayHello sh = (SayHello)Activator.GetObject(typeof(SayHello), "tcp://localhost:8086/SayHello");


  SayEventReappear re = new SayEventReappear();
  re.ClientId = "John";
  sh.OnSay += new SayHandler(re.Say);
  re.OnSay += new SayHandler(re_OnSay);
  Console.ReadKey();
  }
  static void re_OnSay(string text)
  {
  Console.WriteLine(text);
  }
  }


  远程对象、委托及事件重现器(需同时部署在服务端及客户端):

Code
  public class SayHello : MarshalByRefObject
  {
  public event SayHandler OnSay;
  public void Say(string clientId, string text)
  {
  if (this.OnSay != null) this.OnSay(text);
  }
  }
  public delegate void SayHandler(string text);
  public class SayEventReappear : MarshalByRefObject
  {
  public event SayHandler OnSay;
  public void Say(string text)
  {
  if (this.OnSay != null) this.OnSay(text);

  }
  }


  OK,我的信息广播程序就这样完成了。

 

  但是,我很快就发现了问题:如果我的确想让所有订阅我的广播事件的客户端都得到我要广播的信息,这个实现应该不会有问题。但是现在我有一个消息只想通知 Mike 或 John (正如以上代码),(注:可能这时不能再称为“广播”了),我的广播程序依然将这个消息通知到了每一个客户端。

4008-168-664  
返回顶部  
海南硕思云网络科技有限公司     地址:海南省海口市国贸大道海涯国际大厦19F
咨询电话:0898-66611999 / 66611997 / 66611996    全国免费电话:400-8168-664    企业QQ:466611999

2003-2018 Hisosi.Com  All Rights Reserved. 版权所有:硕思科技   

您好,硕思科技欢迎您的光临,请问有什么可以帮到您?