|
分類:[C#]
お世話になっております。
Remotingを使用して、メッセージの送信を行うアプリを作成しています。
下記のようにClientを起動すると引数のメッセージをイベントとしてServerに送信するようにしています。
起動後しばらくは問題ないのですが、数分放置後同じ操作を行うと下記例外が発生します。
どのようにすれば回避できるかアドバイス、ご教授お願いします。
.NET2.0 VS2005
---
'System.Runtime.Remoting.RemotingException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報: オブジェクト '/message' が切断されたか、サーバーに存在しません。
※例外はClientの"msg.Call(args[0]);"で発生していました。
---
【Client】
static void Main(string[] args)
{
// IPC Channel を作成
IpcClientChannel clientChannel = new IpcClientChannel();
// リモートオブジェクトを登録
ChannelServices.RegisterChannel(clientChannel, true);
// オブジェクトを作成
RemoteMessage.RemoteMessage msg = (RemoteMessage.RemoteMessage)Activator.GetObject(
typeof(RemoteMessage.RemoteMessage), "ipc://remote/message");
msg.Call(args[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() { }
}
【Server】
private void RemoteServer()
{
try
{
// IPC Channelを作成
IpcServerChannel servChannle = new IpcServerChannel("remote");
// リモートオブジェクトを登録
ChannelServices.RegisterChannel(servChannle, true);
// ChannleのURIを表示
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);
}
}
public void msg_eventCall(string str)
{
SearchString(str);//受信した文字列を処理するメソッド
}
|