关于Remoting信道的通信的问题
生活随笔
收集整理的這篇文章主要介紹了
关于Remoting信道的通信的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于Remoting信道的通信的問題 我是今年才畢業的應屆生,找了一家公司,主要從事.net開發。公司讓我從事Remoting開發,最近幾天看了wayfarer的一些文章,覺得很好,自己也試著做了一個小程序,不知道為什么達不到預期的效果。
現在把程序發上來,希望大家能為我解決問題。
遠程類:
using?System;
using?System.Runtime.Remoting;
namespace?Distribution_Framework
{
????//定義廣播事件的參數類
????[Serializable]
????public?class?BroadcastEventArgs?:?EventArgs
????{
????????private?string?msg?=?null;
????????public?BroadcastEventArgs(string?message)
????????{
????????????msg?=?message;
????????}
????????public?string?Message
????????{
????????????get
????????????{
????????????????return?msg;
????????????}
????????}
????}
????public?delegate?void?BroadcastEventHandler(object?sender,?BroadcastEventArgs?submitArgs);
????public?class?InfoCenter?:?MarshalByRefObject
????{
????????private?static?int?count=?0;
????????public?InfoCenter()
????????{
????????????count?=?count+1;
????????????Console.Write(count.ToString());
????????????Console.WriteLine("InfoCenter?created.");
????????}
????????public?override?object?InitializeLifetimeService()
????????{
????????????return?null;
????????}
????????public?event?BroadcastEventHandler?Broadcaster;
????????public?void?Broadcasting(string?message)
????????{
????????????BroadcastEventArgs?e?=?new?BroadcastEventArgs(message);
????????????if?(Broadcaster?!=?null)
????????????{
????????????????Broadcaster(this,?e);//發出事件
????????????????Console.WriteLine("Broadcast:"?+?e.Message);
????????????}
????????}
????}
}
服務端:
using?System;
using?System.Runtime.Remoting;
using?System.Runtime.Remoting.Channels;
using?System.Runtime.Remoting.Channels.Http;
using?System.Runtime.Serialization.Formatters;
using?System.Collections;
//using?System.Runtime.Remoting.Services;
//using?directive;
namespace?Distribution_Framework
{
????class?Server
????{
????????public?static?void?Main(string[]?Args)
????????{
????????????RemotingConfiguration.Configure(@"F:\Broadcast\Server\Server\Server.exe.config");?
????????????/**//*IDictionary?channelProps?=?new?Hashtable();
????????????channelProps["name"]?="BroadCaster";
????????????channelProps["priority"]?=1;
????????????channelProps["port"]=8011;
????????????BinaryServerFormatterSinkProvider?sinkProvider?=?new?BinaryServerFormatterSinkProvider();
????????????sinkProvider.TypeFilterLevel?=TypeFilterLevel.Full;
????????????HttpServerChannel?channel?=?new?HttpServerChannel(channelProps,sinkProvider);
????????????ChannelServices.RegisterChannel(channel);*/
????????????Console.WriteLine("Server?is?running,?Press?Enter?key?to?exit.");
????????????Console.ReadLine();
????????
????????????/**//*RemotingConfiguration.RegisterWellKnownServiceType(typeof(Distribution_Framework.InfoCenter),?"Broadcast",?WellKnownObjectMode.Singleton);
????????????HttpChannel?myChannel?=?new?HttpChannel(8011);
????????????ChannelServices.RegisterChannel(myChannel);
????????????IServerChannelSink?sc?=?myChannel.ChannelSinkChain;
????????????while?(sc?!=?null)
????????????{
????????????????if?(sc?is?BinaryServerFormatterSink)
????????????????{
????????????????????((BinaryServerFormatterSink)sc).TypeFilterLevel?=?TypeFilterLevel.Full;
????????????????????//break;
????????????????}
????????????????if?(sc?is?SoapServerFormatterSink)
????????????????{
????????????????????((SoapServerFormatterSink)sc).TypeFilterLevel?=?TypeFilterLevel.Full;
????????????????????//break;
????????????????}
????????????????sc?=?sc.NextChannelSink;
????????????}
????????????Console.WriteLine("Server?is?running,?Press?Enter?key?to?exit.");
????????????Console.ReadLine();
????????*/
????????}
????}
}
Annoncer:
using?System;
using?System.Timers;
using?System.Runtime.Remoting;
using?System.Runtime.Remoting.Channels;
using?System.Runtime.Remoting.Channels.Http;
namespace?Distribution_Framework
{
????class?Announcer
????{
????????InfoCenter?infoCenter;
????????public?static?void?Main(string[]?Args)
????????{
????????????/**//*HttpChannel?channel?=?new?HttpChannel();
????????????ChannelServices.RegisterChannel(channel);
????????????RemotingServices.Connect(typeof(InfoCenter),"http://localhost:8011/BroadCaster");*/
????????????Announcer?announcer?=?new?Announcer();
????????????announcer.Run();
????????????Console.WriteLine("The?announcer?has?been?started.");
????????????Console.ReadLine();
????????}
????????public?void?Run()
????????{
????????????try
????????????{
????????????????RemotingConfiguration.Configure(@"F:\Broadcast\Announcer\Announcer\Announcer.exe.config");
????????????????//infoCenter?=?new?InfoCenter();
????????????????Timer?timer?=?new?Timer(1000);
????????????????timer.Elapsed?+=?new?System.Timers.ElapsedEventHandler(this.timer_Elapsed);
????????????????timer.Enabled?=?true;
????????????}
????????????catch(Exception?ex)
????????????{
????????????????Console.WriteLine(ex.ToString());
????????????????Console.ReadLine();
????????????}
????????}
????????private?void?timer_Elapsed(object?sender,?System.Timers.ElapsedEventArgs?e)
????????{
????????????string?msg?=?"The?Time?is:?"?+?DateTime.Now.ToString();
????????????Console.WriteLine("Send?Message:"?+?msg);
????????????infoCenter.Broadcasting(msg.ToString());
????????}
????}
}
客戶端:
using?System;
using?System.Runtime.Remoting;
using?System.Runtime.Remoting.Channels;
using?System.Runtime.Remoting.Channels.Http;
using?System.Collections;
using?System.Runtime.Serialization.Formatters;
namespace?Distribution_Framework
{
????class?Receiver?:?MarshalByRefObject
????{
????????InfoCenter?infoCenter;
????????public?Receiver()
????????{
????????}
????????public?override?object?InitializeLifetimeService()?
????????{
????????????return?null;
????????}
????????public?void?Run()
????????{
????????????try
????????????{
????????????????//RemotingConfiguration.Configure(@"F:\Broadcast\Receiver\Receiver\Receiver.exe.config");
????????????????HttpChannel?channel?=?new?HttpChannel();
????????????????ChannelServices.RegisterChannel(channel);
????????????????RemotingServices.Connect(typeof(InfoCenter),"http://localhost:8011/BroadCaseter");
????????????????infoCenter?=?new?InfoCenter();
????????????????//訂閱信息
????????????????infoCenter.Broadcaster?+=?new?BroadcastEventHandler(this.BroadcastReceiver);
????????????????//infoCenter.Broadcasting("hello");
????????????????Console.WriteLine("Ready?to?Recieve?Message");
????????????????Console.ReadLine();
????????????}
????????????catch(Exception?ex)
????????????{
????????????????Console.WriteLine(ex.Message);
????????????????Console.ReadLine();
????????????}
????????????//取消訂閱
????????????//infoCenter.Broadcaster?-=?new?BroadcastEventHandler(this.BroadcastReceiver);
????????}
????????public?void?BroadcastReceiver(object?sender,?BroadcastEventArgs?args)
????????{
????????????Console.WriteLine("Received:"?+?args.Message);//打印接收信息
????????}
????????public?static?void?Main()
????????{
????????????Receiver?receiver?=?new?Receiver();
????????????receiver.Run();
????????}
????}
}
在客戶端如果用配置文件就報錯,說<channels>附進有錯誤。
客戶端配置文件:
<?xml?version="1.0"?encoding="utf-8"??>
<configuration>
???<system.runtime.remoting>
??????<application>
?????????<client>
????????????<client?url="http://localhost:8011/BroadCaster">
????????????????<activated?type="Distribution_Framework.InfoCenter,?InfoCenter"/>
????????????</client>
?????????<channels>
????????????<channel?ref="http"?port="0"/>
????????????????<serverProviders>
??????????????????<provider?ref="binary"?typeFilterLevel="Full"/>
????????????????</serverProviders>
?????????</channels>
??????</application>
???</system.runtime.remoting>
</configuration>
posted on 2006-04-19 08:34?偷回憶的人 閱讀(...) 評論(...) 編輯 收藏
現在把程序發上來,希望大家能為我解決問題。
遠程類:
using?System;
using?System.Runtime.Remoting;
namespace?Distribution_Framework
{
????//定義廣播事件的參數類
????[Serializable]
????public?class?BroadcastEventArgs?:?EventArgs
????{
????????private?string?msg?=?null;
????????public?BroadcastEventArgs(string?message)
????????{
????????????msg?=?message;
????????}
????????public?string?Message
????????{
????????????get
????????????{
????????????????return?msg;
????????????}
????????}
????}
????public?delegate?void?BroadcastEventHandler(object?sender,?BroadcastEventArgs?submitArgs);
????public?class?InfoCenter?:?MarshalByRefObject
????{
????????private?static?int?count=?0;
????????public?InfoCenter()
????????{
????????????count?=?count+1;
????????????Console.Write(count.ToString());
????????????Console.WriteLine("InfoCenter?created.");
????????}
????????public?override?object?InitializeLifetimeService()
????????{
????????????return?null;
????????}
????????public?event?BroadcastEventHandler?Broadcaster;
????????public?void?Broadcasting(string?message)
????????{
????????????BroadcastEventArgs?e?=?new?BroadcastEventArgs(message);
????????????if?(Broadcaster?!=?null)
????????????{
????????????????Broadcaster(this,?e);//發出事件
????????????????Console.WriteLine("Broadcast:"?+?e.Message);
????????????}
????????}
????}
}
服務端:
using?System;
using?System.Runtime.Remoting;
using?System.Runtime.Remoting.Channels;
using?System.Runtime.Remoting.Channels.Http;
using?System.Runtime.Serialization.Formatters;
using?System.Collections;
//using?System.Runtime.Remoting.Services;
//using?directive;
namespace?Distribution_Framework
{
????class?Server
????{
????????public?static?void?Main(string[]?Args)
????????{
????????????RemotingConfiguration.Configure(@"F:\Broadcast\Server\Server\Server.exe.config");?
????????????/**//*IDictionary?channelProps?=?new?Hashtable();
????????????channelProps["name"]?="BroadCaster";
????????????channelProps["priority"]?=1;
????????????channelProps["port"]=8011;
????????????BinaryServerFormatterSinkProvider?sinkProvider?=?new?BinaryServerFormatterSinkProvider();
????????????sinkProvider.TypeFilterLevel?=TypeFilterLevel.Full;
????????????HttpServerChannel?channel?=?new?HttpServerChannel(channelProps,sinkProvider);
????????????ChannelServices.RegisterChannel(channel);*/
????????????Console.WriteLine("Server?is?running,?Press?Enter?key?to?exit.");
????????????Console.ReadLine();
????????
????????????/**//*RemotingConfiguration.RegisterWellKnownServiceType(typeof(Distribution_Framework.InfoCenter),?"Broadcast",?WellKnownObjectMode.Singleton);
????????????HttpChannel?myChannel?=?new?HttpChannel(8011);
????????????ChannelServices.RegisterChannel(myChannel);
????????????IServerChannelSink?sc?=?myChannel.ChannelSinkChain;
????????????while?(sc?!=?null)
????????????{
????????????????if?(sc?is?BinaryServerFormatterSink)
????????????????{
????????????????????((BinaryServerFormatterSink)sc).TypeFilterLevel?=?TypeFilterLevel.Full;
????????????????????//break;
????????????????}
????????????????if?(sc?is?SoapServerFormatterSink)
????????????????{
????????????????????((SoapServerFormatterSink)sc).TypeFilterLevel?=?TypeFilterLevel.Full;
????????????????????//break;
????????????????}
????????????????sc?=?sc.NextChannelSink;
????????????}
????????????Console.WriteLine("Server?is?running,?Press?Enter?key?to?exit.");
????????????Console.ReadLine();
????????*/
????????}
????}
}
Annoncer:
using?System;
using?System.Timers;
using?System.Runtime.Remoting;
using?System.Runtime.Remoting.Channels;
using?System.Runtime.Remoting.Channels.Http;
namespace?Distribution_Framework
{
????class?Announcer
????{
????????InfoCenter?infoCenter;
????????public?static?void?Main(string[]?Args)
????????{
????????????/**//*HttpChannel?channel?=?new?HttpChannel();
????????????ChannelServices.RegisterChannel(channel);
????????????RemotingServices.Connect(typeof(InfoCenter),"http://localhost:8011/BroadCaster");*/
????????????Announcer?announcer?=?new?Announcer();
????????????announcer.Run();
????????????Console.WriteLine("The?announcer?has?been?started.");
????????????Console.ReadLine();
????????}
????????public?void?Run()
????????{
????????????try
????????????{
????????????????RemotingConfiguration.Configure(@"F:\Broadcast\Announcer\Announcer\Announcer.exe.config");
????????????????//infoCenter?=?new?InfoCenter();
????????????????Timer?timer?=?new?Timer(1000);
????????????????timer.Elapsed?+=?new?System.Timers.ElapsedEventHandler(this.timer_Elapsed);
????????????????timer.Enabled?=?true;
????????????}
????????????catch(Exception?ex)
????????????{
????????????????Console.WriteLine(ex.ToString());
????????????????Console.ReadLine();
????????????}
????????}
????????private?void?timer_Elapsed(object?sender,?System.Timers.ElapsedEventArgs?e)
????????{
????????????string?msg?=?"The?Time?is:?"?+?DateTime.Now.ToString();
????????????Console.WriteLine("Send?Message:"?+?msg);
????????????infoCenter.Broadcasting(msg.ToString());
????????}
????}
}
客戶端:
using?System;
using?System.Runtime.Remoting;
using?System.Runtime.Remoting.Channels;
using?System.Runtime.Remoting.Channels.Http;
using?System.Collections;
using?System.Runtime.Serialization.Formatters;
namespace?Distribution_Framework
{
????class?Receiver?:?MarshalByRefObject
????{
????????InfoCenter?infoCenter;
????????public?Receiver()
????????{
????????}
????????public?override?object?InitializeLifetimeService()?
????????{
????????????return?null;
????????}
????????public?void?Run()
????????{
????????????try
????????????{
????????????????//RemotingConfiguration.Configure(@"F:\Broadcast\Receiver\Receiver\Receiver.exe.config");
????????????????HttpChannel?channel?=?new?HttpChannel();
????????????????ChannelServices.RegisterChannel(channel);
????????????????RemotingServices.Connect(typeof(InfoCenter),"http://localhost:8011/BroadCaseter");
????????????????infoCenter?=?new?InfoCenter();
????????????????//訂閱信息
????????????????infoCenter.Broadcaster?+=?new?BroadcastEventHandler(this.BroadcastReceiver);
????????????????//infoCenter.Broadcasting("hello");
????????????????Console.WriteLine("Ready?to?Recieve?Message");
????????????????Console.ReadLine();
????????????}
????????????catch(Exception?ex)
????????????{
????????????????Console.WriteLine(ex.Message);
????????????????Console.ReadLine();
????????????}
????????????//取消訂閱
????????????//infoCenter.Broadcaster?-=?new?BroadcastEventHandler(this.BroadcastReceiver);
????????}
????????public?void?BroadcastReceiver(object?sender,?BroadcastEventArgs?args)
????????{
????????????Console.WriteLine("Received:"?+?args.Message);//打印接收信息
????????}
????????public?static?void?Main()
????????{
????????????Receiver?receiver?=?new?Receiver();
????????????receiver.Run();
????????}
????}
}
在客戶端如果用配置文件就報錯,說<channels>附進有錯誤。
客戶端配置文件:
<?xml?version="1.0"?encoding="utf-8"??>
<configuration>
???<system.runtime.remoting>
??????<application>
?????????<client>
????????????<client?url="http://localhost:8011/BroadCaster">
????????????????<activated?type="Distribution_Framework.InfoCenter,?InfoCenter"/>
????????????</client>
?????????<channels>
????????????<channel?ref="http"?port="0"/>
????????????????<serverProviders>
??????????????????<provider?ref="binary"?typeFilterLevel="Full"/>
????????????????</serverProviders>
?????????</channels>
??????</application>
???</system.runtime.remoting>
</configuration>
posted on 2006-04-19 08:34?偷回憶的人 閱讀(...) 評論(...) 編輯 收藏
轉載于:https://www.cnblogs.com/liuwenjun830/archive/2006/04/19/378733.html
總結
以上是生活随笔為你收集整理的关于Remoting信道的通信的问题的全部內容,希望文章能夠幫你解決所遇到的問題。