非常に単純な.Netリモート接続を構築しようとしていますが、魔法の呪文を理解できないようです。.Net Remotingエラー "要求されたサービスが見つかりません"
私はシングルトンを意味するサーバーサイドクラスを持っており、サービスプロセスの期間中は生きています。
public class MyRemoteServerClass : MarshalByRefObject
{
public void DoSomething()
{
System.Diagnostics.Trace.Assert(false);
}
public override object InitializeLifetimeService()
{
return null;
}
}
.NETリモート処理の私の測定値に基づいて、私は、サービス内のサーバーのクラスをインスタンス化し、登録するために、このコードを書いた:
static void Main(string[] args)
{
MyRemoteServerClass server = new MyRemoteServerClass();
TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel, false);
string url = "tcp://localhost:8080/MyRemoteServerClass";
RemotingServices.Marshal(server, url, server.GetType());
System.Console.ReadLine();
}
私が呼び出しの.NETのWinFormsクライアントにこのコードを書きました「MyRemoteServerClass.DoSomething」関数:
private void button1_Click(object sender, EventArgs e)
{
string url = "tcp://localhost:8080/MyRemoteServerClass";
ChannelServices.RegisterChannel(new TcpChannel(), false);
MyRemoteServerClass root = Activator.GetObject(typeof(MyRemoteServerClass), url) as MyRemoteServerClass;
root.DoSomething();
}
「Activate.GetObject」コールは、サーバのMyRemoteServerClass "インスタンスへのプロキシの参照を取得するために表示されます。しかし、私が 'DoSomething'を呼び出すと、「要求されたサービスが見つかりません」という例外が発生します。
{System.Runtime.Remoting.RemotingException:
Serverのスタックトレースが見つかりません要求されたサービス:System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack、IMessageがrequestMsg、ITransportHeadersのrequestHeaders、ストリームrequestStreamで 、IMessageが& responseMsg、ITransportHeaders & responseHeaders、ストリーム& responseStream)[0]で
例外再スロー:System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessageがreqMsg、Iで CにおけるRemoteExampleClient.Form1.button1_Click(オブジェクト送信者、のEventArgs電子)でRemoteExampleServer.MyRemoteServerClass.DoSomethingでSystem.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(のMessageData & msgData、のInt32型でメッセージretMsg) ) () 。 \ Aaron \ RemoteExampleClient \ Form1.cs:line 30} System.Exception {System.Runtime.Remoting.RemotingException}
私は間違っていますか?ファイアウォールを介してこれらのアプリケーションへのアクセスを許可しました(ファイアウォールを完全に無効にすると同じ動作になります)。私は自分のコンピュータに他のセキュリティソフトウェアを持っていません。
おかげで、
アーロン
PS。私は、 'App.config' XMLに変更を加えないソリューションを好むだろう。可能であれば、.Netリモート接続をコードスペースで設定したいと思います。