.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 ¿Í»§¶ËʹÓÃÊÖ²á