.Net RemotingÓëServer ¶ÔÏóÏê½â :: ÌýÌÄ.NET

来源: BlogBus 原始链接: http://blogbus.com:80/blogbus/blog/diary.php?diaryid=328156 存档链接: https://web.archive.org/web/20040930223145id_/http://blogbus.com:80/blogbus/blog/diary.php?diaryid=328156


ÌýÌÄ.NET dotNETÈÃÎÒÀÛËÀÁË,ÎÒµÄϵͳºÎʱÄÜÉè¼Æ³öÀ´ <<<΢ÈíµÄÔ¶³Ì´¦Àí¿ò¼Ü.NET Remoting | Ê×Ò³ | .NETÖÐEXCELµ¼³öʾÀý>>> 2004-08-14 .Net RemotingÓëServer ¶ÔÏóÏê½â .Net RemotingÓëServer ¶ÔÏóÏê½â ÕªÒª ¡¡¡¡±¾ÎĽéÉÜÁËNet RemotingµÄ¼¸¸ö¼òµ¥¸ÅÄ²¢³¢ÊÔ´Ó×î¼òµ¥µÄ½Ç¶È°ïÄúÀí½âʲôÊÇRemoting¡£Í¬Ê±£¬±¾ÎİüÀ¨ÁËÒ»¸öʹÓÃHttp Channelµ÷ÓÃRemoting·þÎñÆ÷µÄÀý×Ó£¬²¢ÌÖÂÛÁ˲»Í¬µÄServer¶ÔÏóµÄ²î±ðÒÔ¼°¶ÔÏóµÄÉúÃüÖÜÆÚ¡£ ¡¡¡¡Í¨¹ý±¾ÆªÎÄÕµÄÔĶÁ£¬Óû§¿ÉÒÔ¶ÔRemotingµÄ»ù±¾¸ÅÄîÓÐÁ˽⣬²¢ÖªµÀ¼¸ÖÖServer¶Ë¶ÔÏóµÄÇø±ðºÍServer¶ÔÏóÉúÃüÖÜÆÚµÄ¸ÅÄî¡£ ¡¡¡¡ Remoting¼ò½é ¡¡¡¡ÏàÐźܶàÈ˶¼ÔÚ²»Í¬µÄµØ·½¿´µ½RemotingÕâ¸öÃû´Ê£¬ÆäʵËüµÄ¸ÅÄîºÜ¼òµ¥¡£ÎÒÃÇͨ¹ýʹÓÃRemotingÀ´½øÐв»Í¬Ó¦ÓóÌÐòÖ®¼äµÄͨÐÅ£¬²»¹ÜÕâЩ³ÌÐòÊÇÔÚͬһ̨¼ÆËã»úÉÏ£¬»¹ÊÇÔÚ¾ÖÓòÍøÄڵIJ»Í¬¼ÆËã»úÉÏ£¬ÉõÖÁÔÚInternetµÄ²»Í¬²Ù×÷ϵͳÉÏ£¨µ±È»ÏàÓ¦µÄ²Ù×÷ϵͳҲ±ØÐëʵÏÖÁË.Net Framework£©¡£RemotingµÄÁ½´ó¹¦ÄÜÔÚÓÚ£º ¡¡¡¡1£©²»Í¬½ø³Ì¼äµÄͨÐÅ¡£ ¡¡¡¡2£©²»Í¬Ó¦ÓÃÓò£¨AppDomain£©£¬²»Í¬½ø³ÌµÄ¶ÔÏóÖ®¼äµÄͨÐÅ£¨¿ÉÒÔʹÓöàÖÖͨÐÅЭÒ飩¡£ ¡¡¡¡ .NET Remoting¿ò¼Ü ¡¡¡¡ÎªÁËʹÓÃRemoting, .NETÌṩÁËÒ»ÕûÌ׿ò¼ÜÀ´Ê¹ÕâÖÖ·Ö²¼µÄµ÷ÓÃ͸Ã÷»¯¡£ËüµÄ¿ò¼ÜÈçÏÂͼËùʾ£º ͼ1£º.NET Remoting¹¹¼Üͼ ¡¡¡¡Í¨³£Óõ½µÄRemotingµÄ¸ÅÄîÓУº ¡¡¡¡Remoting Channel£ºÕâÊÇÖ¸¿Í»§¶ËºÍ·þÎñÆ÷¶ËµÄͨÐÅЭÒ飬ÈçÎÒÃÇ¿ÉÒÔʹÓÃTCP, HTTPЭÒé¡£ ¡¡¡¡Serializer£ºÕâÊÇÖ¸ÔÚ´«Êäʱ²ÉÓúÎÖÖ¸ñʽÀ´´«ÊäÊý¾Ý£¬ÈçÎÒÃÇ¿ÉÒÔ²ÉÓÃBinary£¬Ò²¿ÉÒÔ²ÉÓÃSOAPÀ´´«ÊäXML¸ñʽµÄÊý¾Ý. ¡¡¡¡.NETÁ¦Í¼¼ò»¯ÕâЩ¸ÅÄîµÄ±à³Ì£¬ËùÒÔÉÏÃæËùÊöµÄЭÒéºÍ¸ñʽ¶¼¿ÉÒÔͨ¹ý¸ü¸ÄÅäÖÃÎļþÇл»¡£ÕâÒ²ÊDZà³ÌÈËÔ±²»Óõ£ÐĵÄÎÊÌâ¡£ÈçÒ»¶ÎµäÐ͵Ŀͻ§¶ËÅäÖÃÎļþµÄÄÚÈÝÊÇ£º £¼CONFIGURATION£¾ £¼SYSTEM.RUNTIME.REMOTING£¾ £¼APPLICATION£¾ £¼CHANNELS£¾ £¼CHANNEL ref="http" clientConnectionLimit="200"£¾ £¼CLIENTPROVIDERS£¾ £¼FORMATTER ref="binary"£¾ £¼/CLIENTPROVIDERS£¾ £¼/CHANNEL£¾ £¼/CHANNELS£¾ £¼/APPLICATION£¾ £¼/SYSTEM.RUNTIME.REMOTING£¾ £¼/CONFIGURATION£¾ RemotingµÄÒ»¸öµäÐÍʾÀý ¡¡¡¡ÈÃÎÒÃÇÊ×ÏÈÀ´¿´Ò»¸öµäÐ͵ÄʵÀý¡£ÎÒÃÇ»áÓÐÒ»¸ö·þÎñÆ÷³ÌÐòServer.exeºÍÒ»¸ö¿Í»§¶Ë³ÌÐòCAOClient.exe¡£¿Í»§¶Ë³ÌÐò»áͨ¹ýhttp channelµ÷Ó÷þÎñÆ÷¶ËRemoteType.dllµÄ¶ÔÏóºÍ·½·¨¡£ÎÒÃÇ»áÀ´¼ì²éÔÚ¼¸ÖÖ²»Í¬µÄServer¶ÔÏóÏ£¬ÕâЩµ÷ÓûáÓÐʲôÑù²»Í¬µÄ½á¹û¡£ ¡¡¡¡ ·þÎñÆ÷¶Ë´úÂë Server.cs using System; using System.Runtime.Remoting; public class Server{ public static void Main(string[] Args){ // Load the configuration file RemotingConfiguration.Configure("server.exe.config"); Console.WriteLine("The server is listening. Press Enter to exit...."); Console.ReadLine(); Console.WriteLine("GC'ing."); GC.Collect(); GC.WaitForPendingFinalizers(); } } ¡¡¡¡ ±í1£ºServer.csÔ´´úÂë Server.exe.config £¼SYSTEM.RUNTIME.REMOTING£¾ £¼APPLICATION£¾ £¼SERVICE£¾ £¼ACTIVATED type="ClientActivatedType, RemoteType"£¾ £¼/SERVICE£¾ £¼CHANNELS£¾ £¼CHANNEL ref="http" port="8088"£¾ £¼/CHANNELS£¾ £¼/APPLICATION£¾ £¼/SYSTEM.RUNTIME.REMOTING£¾ £¼/CONFIGURATION£¾ ¡¡¡¡ ±í2£ºServer.exe.configÔ´´úÂë RemoteType.cs using System; using System.Runtime.Remoting.Lifetime; using System.Security.Principal; public class ClientActivatedType : MarshalByRefObject{ private int i; // override the lease settings for this object public override Object InitializeLifetimeService(){ return null; } public string RemoteMethod(){ // announce to the server that we've been called. Console.WriteLine("ClientActivatedType.RemoteMethod called."); // report our client identity name i=this.GetHashCode(); return "RemoteMethod called. " + i; } public string RemoteMethod1(){ return "RemoteMethod1 called. " + i; } } ¡¡¡¡ ±í3£ºRemoteType.csÔ´´úÂë ¡¡¡¡ ¿Í»§¶Ë´úÂë CAOClient.cs using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Lifetime; public class Client{ public static void Main(string[] Args){ // Load the configuration file RemotingConfiguration.Configure("CAOclient.exe.config"); ClientActivatedType CAObject = new ClientActivatedType(); Console.WriteLine("Client-activated object: " + CAObject.RemoteMethod()); Console.WriteLine("Client-activated object: " + CAObject.RemoteMethod1()); Console.WriteLine("Press Enter to end the client application domain."); Console.ReadLine(); } } ¡¡¡¡ ±í4 CAOClient.csÔ´´úÂë CAOClient.exe.config £¼CONFIGURATION£¾ £¼SYSTEM.RUNTIME.REMOTING£¾ £¼APPLICATION£¾ £¼CLIENT url="http://localhost:8088"£¾ £¼ACTIVATED type="ClientActivatedType, RemoteType"£¾ £¼/CLIENT£¾ £¼CHANNELS£¾ £¼CHANNEL ref="http" port="0"£¾ £¼/CHANNELS£¾ £¼/APPLICATION£¾ £¼/SYSTEM.RUNTIME.REMOTING£¾ £¼/CONFIGURATION£¾ ¡¡¡¡ ±í5£ºCAOClient.exe.configÔ´´úÂë ¡¡¡¡±àÒëÎļþ ¡¡¡¡Ê¹Óá°Visual Studio .NET Command Prompt="·Ö±ð±àÒëÉÏÊöÎļþ: csc /target:library RemoteType.cs csc Server.cs csc ¨Creference:RemoteType.dll CAOClient.cs Äú»á¿´µ½Èý¸öÊä³öÎļþ£ºRemoteType.dll, Server.exe ºÍ CAOClient.exe¡£ ÔËÐÐRemoting³ÌÐò ÔÚÃüÁîÐз½Ê½ÏÂÆô¶¯£ºServer.exe ÔÚÃüÁîÐз½Ê½ÏÂÆô¶¯£ºCAOClient.exe ¡¡¡¡ ³ÌÐò·ÖÎö ¡¡¡¡ÕâÊÇÒ»¸ö·Ç³£¼òµ¥µÄRemoting³ÌÐò£¬Èç¹ûÈ¥µôÁ½¸öÅäÖÃÎļþ£¨Server.exe.configºÍCAOClient.exe.config£©£¬Äã¼òÖ±¿´²»µ½ËüºÍ·ÇRemotingµÄ³ÌÐòÓÐʲô²î±ð¡£Êµ¼ÊÉÏ£¬ÔÚÁ½¸öÅäÖÃÎļþÖУ¬ÎÒÃÇÖ»ÊÇÅäÖÃÁËRemotingµÄChannel(http:8088)¡£ ΪʲôÐèÒªRemoting ¡¡¡¡ÎÒÃǶ¼ÖªµÀÏÖÔÚµÄWeb³ÌÐò¶¼ÊǶà²ã¼Ü¹¹£ºÊý¾Ý²ã£¬ÉÌÒµÂß¼­²ãºÍ±íʾ²ã¡£ÕâÑùµÄºÃ´¦ÊÇ´úÂëºÍ±íÏֵķÖÀë¡£ÕâÊÇÏÖÔÚ³ÌÐòÉè¼ÆÒ»¸ö³£ÓõÄ˼Ï룬XMLºÍXSLTÒ²ÊÇ»ùÓÚͬÑùµÄ˼Ïë¡£ ¡¡¡¡¼ÙÉèÎÒÃÇ¿ÉÒÔΪһ¸ö³ÌÐòдÁ½¸ö±íʾ²ã£¬Ò»¸öÊÇWeb Application£¬ÁíÒ»¸öÊÇWindows Application,¶øÖ÷ÒªµÄÉÌÒµÂß¼­¶¼·ÅÔÚÂß¼­²ã¡£Èç¹û°ÑÉÌÒµÂß¼­²ãµÄÀàºÍ¶ÔÏó¶¼×÷ΪRemoting¶ÔÏó£¬ÎÒÃǾͿÉÒԷdz£·½±ãµÄʵÏÖÕâÒ»µã¡£Ò»¸ö¾ßÌåµÄÀý×ÓÊÇVisual Studio .NET×Ô´øµÄDuwamish,ÕâÊÇÒ»¸ö·Ç³£ºÃµÄÀý×Ó£¬ÓкܶàºÃµÄÉè¼ÆË¼Ïë¡£ ¡¡¡¡Remoting»¹ÓкܶàÆäËüµÄÓ¦Óó¡¾°£¬Ôڴ˾Ͳ»Ò»Ò»²ûÊö¡£ ¡¡¡¡ ÈýÖÖ²»Í¬µÄRemoting Server¶ÔÏó ¡¡¡¡RemotingµÄServer¶ÔÏóÓÐÈýÖÖ£¬Ã¿Ò»ÖֺͿͻ§¶ËµÄ½»»¥·½Ê½ºÍÉúÃüÖÜÆÚ¶¼ÓÐһЩϸ΢µÄ²î±ð¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«ÎªÄú²ûÊöÕâÈýÖÖServer¶ÔÏóÖ®¼äµÄ²î±ð¡£ ¡¡¡¡ Client Activated ¶ÔÏó ¡¡¡¡ÕâÖÖ¶ÔÏóÔÚServer¶ËµÄÉùÃ÷·½Ê½Îª£º £¼SERVICE£¾ £¼ACTIVATED type="ClientActivatedType, RemoteType"£¾ £¼/SERVICE£¾ ¡¡¡¡¿Í»§¶ËµÄÉùÃ÷·½Ê½Îª£º ¡¡¡¡£¼ACTIVATED type="ClientActivatedType, RemoteType"£¾ ¡¡¡¡±í6£ºClient Activated¶ÔÏóµÄÅäÖÃÎļþ ¡¡¡¡ÔÚÕâÖÖServer¶Ë¶ÔÏóµÄµ÷Ó÷½Ê½Ï£¬¿Í»§¶Ë¶ÔServer¶ÔÏóµ÷ÓÃά³ÖÒ»¸ö¹Ì¶¨µÄÁ´½Ó£¬Òò´ËÔÚÁ½¸ö·½·¨µ÷ÓÃÖ®¼ä£¬±äÁ¿IµÄÖµÄܹ»±£´æ¡£Èç±¾Îıí15´úÂëµÄ·µ»Ø½á¹ûÊÇ£º Client-activated object: RemoteMethod Called, 162. Client-activated object: RemoteMethod1 Called, 162. ¡¡¡¡µ±È»£¬»¹ÓÐÒ»¸ö¶ÔÏóÉúÃüÖÜÆÚµÄÎÊÌ⣬Èç¹û³¬¹ýÁ˶ÔÏóµÄÉúÃüÖÜÆÚ£¬Server¶ËµÄ¶ÔÏó¾Í»á±»Garbage Collection³ÌÐò»ØÊÕ¡£ÕâÊÇÒ»¸öºÜ¸´ÔÓµÄÎÊÌ⣬±¾ÎIJ»¼Ó²ûÊö£¬ÎÒÃÇÖ»ÊÇͨ¹ýÏÂÃæµÄº¯Êý°ÑÉúÃüÖÜÆÚÉèΪÎÞÏÞ¡£ public override Object InitializeLifetimeService(){ return null; } ¡¡¡¡Èç¹û¶ÔServer¶Ë¶ÔÏóµÄÉúÃüÖÜÆÚÓÐÐËȤµÄ»°£¬¿ÉÒԲο¼£º http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconlifetimeleases.asp Single Call ¶ÔÏó ¡¡¡¡ÕâÖÖ¶ÔÏóÔÚServer¶ËµÄÉùÃ÷·½Ê½Îª£º £¼SERVICE> £¼WELLKNOWN mode="SingleCall" type="ClientActivatedType, RemoteType" objectUri="RemoteType.rem"> £¼/SERVICE> ¡¡¡¡¿Í»§¶ËµÄÉùÃ÷·½Ê½Îª£º £¼CLIENT url="http://localhost:8088"£¾ £¼WELLKNOWN type="ClientActivatedType, RemoteType" url="HTTP://localhost:8088/RemoteType.rem"£¾ £¼/CLIENT£¾ ¡¡¡¡ ±í7£ºSingle Call¶ÔÏóµÄÅäÖÃÎļþ ¡¡¡¡ÔÚÕâÖÖServer¶Ë¶ÔÏóµÄµ÷Ó÷½Ê½Ï£¬¿Í»§¶Ë¶ÔServer¶ÔÏóµÄÿ´Îµ÷ÓòúÉúÒ»¸öеÄÁ¬½Ó£¬Òò´ËÔÚÁ½¸ö·½·¨µ÷ÓÃÖ®¼ä£¬±äÁ¿IµÄÖµ²»Äܹ»±£´æ¡£Èç±¾Îıí15´úÂëµÄ·µ»Ø½á¹ûÊÇ£º Client-activated object: RemoteMethod Called, 78. Client-activated object: RemoteMethod1 Called, 0. ¡¡¡¡Singleton¶ÔÏó ¡¡¡¡ÕâÖÖ¶ÔÏóÔÚServer¶ËµÄÉùÃ÷·½Ê½Îª£º £¼SERVICE£¾ £¼WELLKNOWN mode="Singleton" type="ClientActivatedType, RemoteType" objectUri="RemoteType.rem"£¾ £¼/SERVICE£¾ ¡¡¡¡¿Í»§¶ËµÄÉùÃ÷·½Ê½Îª£º £¼CLIENT url="http://localhost:8088"£¾ £¼WELLKNOWN type="ClientActivatedType, RemoteType" url="HTTP://localhost:8088/RemoteType.rem"£¾ £¼/CLIENT> ¡¡¡¡ ±í7£ºSingle Call¶ÔÏóµÄÅäÖÃÎļþ ¡¡¡¡ÔÚÕâÖÖServer¶Ë¶ÔÏóµÄµ÷Ó÷½Ê½Ï£¬ÎÞÂÛÓм¸¸ö¿Í»§¶Ë£¬ÓÀÔ¶¶¼Ö»ÓÐÒ»¸öServer¶Ë¶ÔÏó¡£Èç±¾Îıí1~5´úÂëµÄ·µ»Ø½á¹ûÊÇ£º Client-activated object: RemoteMethod Called, 78. Client-activated object: RemoteMethod1 Called, 78. ¡¡¡¡Õâʱ£¬Èç¹ûÁíÍâÓÐÒ»¸ö¿Í»§¶ËÒ²Æô¶¯£ºCAOClient.exe£¬·µ»Ø½á¹ûÒ²ÊÇ£º Client-activated object: RemoteMethod Called, 78. Client-activated object: RemoteMethod1 Called, 78. ¡¡¡¡ ÈýÖÖ¶ÔÏóµÄ¼òµ¥±È½Ï ¡¡¡¡´ÓÉÏÃæµÄ±È½ÏÖÐÎÒÃÇ¿ÉÒÔ¿´³ö£¬ÔÚÈýÖÖServer¶Ë¶ÔÏóÖУ¬SingletonµÄЧÂÊ×î¸ß£¬µ«ÊÇËùÓпͻ§¶ËµÄµ÷Óö¼Ö»ÄÜά³ÖÒ»¸öServer¶ÔÏó£»Client ActivatedµÄЧÂÊ×îµÍ£¬µ«ÊÇËü¶ÔRemotingµÄÆÁ±Î×îºÃ£¬¾ÍÏñ±¾µØµ÷ÓöÔÏóÒ»Ñù¡£Äú¿ÉÒÔ¸ù¾Ý²»Í¬µÄʹÓó¡¾°Ñ¡Ôñ²»Í¬µÄRemoting¶ÔÏó¡£ ¡¡¡¡RemotingºÍWeb ServiceÇø±ð ¡¡¡¡RemotingºÍWeb Servcieµ½µ×ÓÐʲôÑùµÄ²î±ðÄØ£¿Ï±íÊÇÒ»¸ö¼òµ¥µÄ±È½Ï£º ¡¡¡¡ÓÉÓÚWeb ServiceÊÇÒ»¸ö¼òµ¥µÄËÉñîºÏ½á¹¹£¬ËùÒÔ¶ÔÓÚ¶ÔÏóµÄ״̬²»Óè±£´æ¡£ÕâÒ»µãÓеãÏñRemotingÖеÄSingle Call¶ÔÏó¡£Í¬Ñù£¬Web ServiceĿǰ»¹²»Ö§³ÖEventºÍ»Øµ÷º¯Êý¡£Ïà±È½ÏÀ´Ëµ£¬Remoting»¹Ö§³ÖЧÂʽϸߵÄBinary±àÂ뷽ʽ¡£ ¡¡¡¡µ«ÊÇ£¬RemotingÖ»Äܹ»ÔËÐÐÔÚ.NET FrameworkÖ®ÉÏ£¬¶øWeb ServiceÏàÓ¦¾ÍÏíÓиü¶à¡¢¸üÁé»îµÄÑ¡Ôñ¡£ ÌýÌÄ.NET ·¢±íÓÚ 2004-08-14 17:20 ÒýÓÃTrackback(0) | ±à¼­ ÆÀÂÛ ·¢±íÆÀÂÛ ×îºó¸üРÁ½¸öÖÇÁ¦Ìâ.¿´¿´ÄãÓжà´ÏÃ÷ PB×öµÄERPϵͳStartERP .NetÈý²ãÓ¦ÓõÄHello World³ÌÐò ÖÇÄܿͻ§¶Ë¿ª·¢ÖÐÐÄ ORACLEµÄǰNÌõÅÅÐò´¦Àí·½·¨ ERPÑ¡ÐͺÎÒÔ¡°ÓеķÅʸ¡± cvsntÓû§°²È«¹ÜÀí ºÍ ²»Í¬Óû§ÉèÖò»Í¬µÄ·ÃÎÊ Ò»¸ö¸Ð¾õ²»´íµÄFLASHÓÎÏ· ÏÂÔØWinCVSµÄµØ·½ CVS ¿Í»§¶ËʹÓÃÊÖ²á