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

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

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

Re[2]: RemotingExceptionについて


(過去ログ 41 を表示中)

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

■21484 / inTopicNo.1)  RemotingExceptionについて
  
□投稿者/ あら (59回)-(2008/07/03(Thu) 08:39:33)

分類:[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);//受信した文字列を処理するメソッド
        }

引用返信 編集キー/
■21498 / inTopicNo.2)  Re[1]: RemotingExceptionについて
□投稿者/ なちゃ (136回)-(2008/07/03(Thu) 12:18:58)
リースとかライフタイムサービスとかかな?
引用返信 編集キー/
■21649 / inTopicNo.3)  Re[2]: RemotingExceptionについて
□投稿者/ あら (60回)-(2008/07/07(Mon) 11:40:00)
返信ありがとうございます。

■No21498 (なちゃ さん) に返信
> リースとかライフタイムサービスとかかな?

下記のように記述すれば、問題を回避できました。
        private void RemoteServer()
        {
            LifetimeServices.LeaseTime = TimeSpan.Zero;
            LifetimeServices.RenewOnCallTime = TimeSpan.Zero;

      ・・・
         }

ありがとうございます。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -