.NET Remotingの面咳は、≈.NET Remotingサ〖バ = UNIXで咐うデ〖モン∽であるソケット奶慨モデルで、 クライアントからのメソッドˇプロパティ〖钙び叫しに滦して、髓搀儡鲁ˇ磊们を乖っているようです。 WEBサ〖バとブラウザの簇犯ように奶慨を倡幌するのは撅に.NET Remotingクライアントであり帳 奶撅イベントなどのようにサ〖バ娄から奶慨を倡幌できません。それを材墙にする数恕が帳笆布のペ〖ジに今いてあります。

今かれている柒推で瓢くのですが帳どうも棱汤がしっくり丸ないので帳讳なりの豺棱を。.NET Remotingの答撩梦急があることを涟捏とします。

年盗

サ〖バˇクライアント鼎奶

サ〖バ娄のみ

クライアントのみ

借妄柒推

クライアント

  1. 奶撅の.NET Remotingの数恕でサ〖バに儡鲁する。HttpChannelを蝗脱する(TcpChannelの眷圭Serializeが己窃する)。
  2. C#の毋
    ChannelServices.RegisterChannel(new HttpChannel());
    remoteserver = (RemotingServer)Activator.GetObject
      (typeof(RemotingServer), "http://192.168.0.1:12345/RemotingServer");
    
  3. サ〖バ〖からの奶慨を减け艰るため帳HTTPチャネルを倡く。RemotingConfiguration.RegisterWellKnownServiceType()は稍妥。
  4. C#の毋
    ChannelService.RegisterChannel(new HttpChannel(port));
    
  5. 鼎奶のところで年盗した≈デ〖タを苞き畔す借妄をするクラス∽のインスタンスを侯喇する。
  6. C#の毋
    receiver = new RemotingClientReceiver();
    
  7. このインスタンスのデ〖タを苞き畔すメソッドを、サ〖バ〖のdelegateにセットする。
  8. C#の毋
    remoteserver.delServerToClient = receiver.ReceiveFromServer;
    

サ〖バ〖

  1. 奶撅の.NET Remotingの数恕でチャネルを倡き帳クライアントからの儡鲁を略つ。
  2. クライアントは儡鲁稿帳サ〖バのdelServerToClientにクライアントのオブジェクトのReceiveFromServer()をセットしてくる。
  3. クライアントにデ〖タを流りたくなれば帳鼎奶の婶尸で年盗したクラスに苞き畔したいデ〖タをセットして帳delServerClient()を钙び叫す。すると、クライアント娄の滦炳するメソッドが悸乖され帳その苞眶としてデ〖タが畔されることになる。
  4. C#の毋
    delServerToClient(new RemoteArg(12345));
    

词帽な棱汤

借妄柒推やソ〖スコ〖ドを斧ると帳剩花なことをやっているように斧えますが帳 妥はクライアントのMarshalByRefObjectサブクラスのメソッドをdelegateとしてサ〖バ〖に畔しておくと帳 サ〖バ〖娄でそのdelegateを蝗脱したときに帳クライアントのメソッドが钙ばれるため帳 それに捐じて苞眶の妨でデ〖タを畔せるということです。

帽にサ〖バ〖から奶慨を倡幌したいなら帳クライアントからIPアドレスˇポ〖トなどを流ってもらい帳サ〖バ〖ⅹクライアントの嫡数羹儡鲁を侯ってしまう数恕もあります。眷圭によってはこちらの数が守网でしょう。 delegateを畔す数恕の网爬は帳マシンは办滦办だけど儡鲁は办滦驴の眷圭です。嫡儡鲁の数恕だと儡鲁髓にポ〖トやURIを恃构しなければならないため帳妊花になります。

2007/2/17 给倡