C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: .NET リモーティングについて


(過去ログ 89 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■52930 / inTopicNo.1)  .NET リモーティングについて
  
□投稿者/ keckry (1回)-(2010/08/28(Sat) 23:22:05)

分類:[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の行をコメントアウトしても同じ例外が発生しました。
そもそも、この様なクライアントとサーバの混在が無理なのか、それともプログラム的に不味いのかが理解できていない状況です。
御存知の方は助言のほう頂ければ幸いです。

引用返信 編集キー/
■52931 / inTopicNo.2)  Re[1]: .NET リモーティングについて
□投稿者/ なちゃ (465回)-(2010/08/29(Sun) 02:21:35)
> 'System.Runtime.Remoting.RemotingException' の初回例外が mscorlib.dll で発生しました。
> 'System.Runtime.Remoting.RemotingException' のハンドルされていない例外が mscorlib.dll で発生しました。
> 追加情報: チャネル 'tcp' は既に登録されています。

とりあえずサーバとクライアントで、明示的に違うチャネル名を指定してみてはどうでしょう。
どちらもデフォルトではtcpになるようですから。

引用返信 編集キー/
■52973 / inTopicNo.3)  Re[2]: .NET リモーティングについて
□投稿者/ keckry (2回)-(2010/08/31(Tue) 00:33:44)
レス遅れて申し訳無いです。

>>なちゃさん
TCPチャンネルとHTTPチャンネルで分けても上手く出来ませんでした。
しかしHTTPチャンネルだけを使うと上手く動作したので取りあえずこのまま開発していきたいと思います。
助言有り難うございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -