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

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

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

Re[2]: IpcClientChannelの破棄方法について


(過去ログ 33 を表示中)

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

■16564 / inTopicNo.1)  IpcClientChannelの破棄方法について
  
□投稿者/ あら (52回)-(2008/04/08(Tue) 09:12:54)

分類:[C#] 

お世話になっております。

同一PC内でexe同士のデータのやり取りをリモーティングを用いて行っ
ています。

exeをアプリA(クライアント側)、アプリB(サーバ側)として、アプリA
にはボタンがあり。そのボタンを押すとデータをアプリBに送るといっ
た感じにしています。

1回目のデータは送信できるのですが、2回目はリモートオブジェクトを
登録する箇所で
「RemotingException チャンネル'ipc client'は既に登録されています。」
の例外が発生します。
データを送る毎にIpcClientChannelを生成/破棄のようにすればよいのか
とも思ったのですが、IpcClientChannelの破棄の方法がわりません。

どのように記述すればよいでしょうか?
アドバイス等宜しくお願いします。

WindowsXP、C# .NET2.0
----
【共通】
    public class RemoteMessage:MarshalByRefObject, IDisposable
    {
        public delegate void CallHandler(string str);
        public event CallHandler eventCall;

        public void Call(string str)
        {
            eventCall(str);
        }

        public void Dispose() { }
    }

【クライアント側】
        private void button2_Click(object sender, EventArgs e)
        {
            IpcClientChannel clientChannle = new IpcClientChannel();
            ChannelServices.RegisterChannel(clientChannle, true); //★2回目のボタン押下でこの箇所で例外が発生
            RemoteMessage.RemoteMessage msg = (RemoteMessage.RemoteMessage)Activator.GetObject(
                typeof(RemoteMessage.RemoteMessage), "ipc://remote/message");
            msg.Call(textBox1.Text);
        }

【サーバ側】
        private void RemoteServer()
        {
            try
            {
                IpcServerChannel servChannle = new IpcServerChannel("remote");
                ChannelServices.RegisterChannel(servChannle, true);
                Console.WriteLine("Listening on {0}", servChannle.GetChannelUri());
                RemoteMessage.RemoteMessage msg = new RemoteMessage.RemoteMessage();
                msg.eventCall += new RemoteMessage.RemoteMessage.CallHandler(msg_eventCall);
                RemotingServices.Marshal(msg, "message", typeof(RemoteMessage.RemoteMessage));
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message + ee.Source + ee.StackTrace);
            }
        }

        static void msg_eventCall(string str)
        {
            MessageBox.Show(str);
        }

引用返信 編集キー/
■16569 / inTopicNo.2)  Re[1]: IpcClientChannelの破棄方法について
□投稿者/ なちゃ (118回)-(2008/04/08(Tue) 10:21:49)
何回も通信するなら普通チャネルはアプリで一度だけ作成します。
Main辺りで一度だけ作成すればいいと思いますよ。

引用返信 編集キー/
■16633 / inTopicNo.3)  Re[2]: IpcClientChannelの破棄方法について
□投稿者/ あら (53回)-(2008/04/09(Wed) 08:36:46)
返信ありがとうございます。

No16569 (なちゃ さん) に返信
> 何回も通信するなら普通チャネルはアプリで一度だけ作成します。
普通、破棄はしないのですね。
設計を見直して、つくり直したいと思います。

ありがとうございます。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -