.NET Remotingの面咳は、≈.NET Remotingサ〖バ = UNIXで咐うデ〖モン∽であるソケット奶慨モデルで、 クライアントからのメソッドˇプロパティ〖钙び叫しに滦して、髓搀儡鲁ˇ磊们を乖っているようです。 WEBサ〖バとブラウザの簇犯ように奶慨を倡幌するのは撅に.NET Remotingクライアントであり帳 奶撅イベントなどのようにサ〖バ娄から奶慨を倡幌できません。それを材墙にする数恕が帳笆布のペ〖ジに今いてあります。
C#の毋
[Serializable]
class RemoteArgs {
public long ID;
RemoteArg(long newID)
{
ID = newID;
}
}
[Serializable]
class RemoteArgsMessage : RemoteArgs {
public string Message;
RemoteArg(long newID, string newMessage)
{
ID = newID;
Message = newMessage;
}
}
C#の毋 public delegate void ServerToClient(RemoteArgs arg);
C#の毋
class RemotingClientReceiver : MarshalByRefObject {
[oneway]
public void ReceiveFromServer(RemoteArgs arg)
{
.NET Remotingサ〖バからargに很せてデ〖タを流ってくるので帳クライアント娄で借妄する柒推を今く
}
}
C#の毋
class RemotingServer : MarshalByRefObject
{
public ServerToClient delServerToClient;
}
または
class RemotingServer : MarshalByRefObject
{
private ServerToClient delServerToClient;
public void SetDelegate(ServerToClient newDelegate)
[
delServerToClient = newDelegate;
}
}
C#の毋 private RemotingClientReceiver receiver;
C#の毋 ChannelServices.RegisterChannel(new HttpChannel()); remoteserver = (RemotingServer)Activator.GetObject (typeof(RemotingServer), "http://192.168.0.1:12345/RemotingServer");
C#の毋 ChannelService.RegisterChannel(new HttpChannel(port));
C#の毋 receiver = new RemotingClientReceiver();
C#の毋 remoteserver.delServerToClient = receiver.ReceiveFromServer;
C#の毋 delServerToClient(new RemoteArg(12345));
借妄柒推やソ〖スコ〖ドを斧ると帳剩花なことをやっているように斧えますが帳 妥はクライアントのMarshalByRefObjectサブクラスのメソッドをdelegateとしてサ〖バ〖に畔しておくと帳 サ〖バ〖娄でそのdelegateを蝗脱したときに帳クライアントのメソッドが钙ばれるため帳 それに捐じて苞眶の妨でデ〖タを畔せるということです。
帽にサ〖バ〖から奶慨を倡幌したいなら帳クライアントからIPアドレスˇポ〖トなどを流ってもらい帳サ〖バ〖ⅹクライアントの嫡数羹儡鲁を侯ってしまう数恕もあります。眷圭によってはこちらの数が守网でしょう。 delegateを畔す数恕の网爬は帳マシンは办滦办だけど儡鲁は办滦驴の眷圭です。嫡儡鲁の数恕だと儡鲁髓にポ〖トやURIを恃构しなければならないため帳妊花になります。
2007/2/17 给倡