|
分類:[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);
}
|