|
分類:[C#]
開発環境 : WinXPSP3, VS2005Pro 使用言語 : .NET C#
.NETリモーティングを利用してPeer2Peerを実装する上でサーバとクライアントを1つのアプリケーションに実装する必要があります。 しかし、同アプリケーションに両方のコードを実装し、実行すると必ず例外が発生してしまいます。 プログラムの内容としては、
1.Form1_Loadでサーバを起動 2.ボタンイベントで起動しているサーバに接続するクライアントを生成/接続
この2.の部分の「System.Activator.GetObject」の部分で以下の例外が発生してしまいます。
'System.Runtime.Remoting.RemotingException' の初回例外が mscorlib.dll で発生しました。 'System.Runtime.Remoting.RemotingException' のハンドルされていない例外が mscorlib.dll で発生しました。 追加情報: チャネル 'tcp' は既に登録されています。
以下ソースコードです。
・インターフェース namespace Remoting { public interface ICustomer { void Counter(int ID); } } ・実装 namespace Remoting { class BaseRemotingObject : System.MarshalByRefObject {
}
class CustomerObject : BaseRemotingObject, ICustomer { public int count = 0; public void Counter(int ID) { count++; System.Console.Write(count); } } } ・サーバ TcpServerChannel listener = new TcpServerChannel(6699); ChannelServices.RegisterChannel(listener, true); RemotingConfiguration.RegisterWellKnownServiceType(typeof(CustomerObject), "CustomerObject", WellKnownObjectMode.Singleton); ・クライアント ChannelServices.RegisterChannel(new TcpClientChannel(), true); ICustomer RemoteCustomer = (ICustomer)System.Activator.GetObject(typeof(ICustomer), "tcp://localhost:6699/CustomerObject"); RemoteCustomer.Counter(10);
なおクライアント部のRegisterChannelの行をコメントアウトしても同じ例外が発生しました。 そもそも、この様なクライアントとサーバの混在が無理なのか、それともプログラム的に不味いのかが理解できていない状況です。 御存知の方は助言のほう頂ければ幸いです。
|