首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于 Remoting,该怎么解决

2012-02-01 
关于RemotingusingSystemusingSystem.CollectionsusingSystem.Runtime.RemotingusingSystem.Runtime.Re

关于 Remoting
using   System;
using   System.Collections;
using   System.Runtime.Remoting;
using   System.Runtime.Remoting.Channels;
using   System.Runtime.Remoting.Channels.Tcp;
using   System.Security.Permissions;
using   System.Runtime.Serialization.Formatters;
using   Remote;

namespace   YiLongServer
{
        [Serializable]
        class   Server
        {
                static   void   Main(string[]   args)
                {
                        BinaryServerFormatterSinkProvider   provider   =   new   BinaryServerFormatterSinkProvider();
                        provider.TypeFilterLevel   =   TypeFilterLevel.Full;
                        IDictionary   props   =   new   Hashtable();
                        props[ "port "]   =   9090;
                        TcpChannel   serverChannel   =   new   TcpChannel(props,   null,   provider);
                        ChannelServices.RegisterChannel(serverChannel,   false);
                        RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject),   "Update ",   WellKnownObjectMode.SingleCall);
                        Console.WriteLine( "Press   return   to   exit ");
                        Console.ReadLine();
                }
        }
}

服务器


远程对象

using   System;
using   System.Data;
using   System.Threading;
using   System.Data.SqlClient;

namespace   Remote
{
        public   class   RemoteObject   :   MarshalByRefObject
        {
                public   delegate   void   StatusEvent(object   sender,   StatusEventArgs   e);

                public   event   StatusEvent   Status;

                public   RemoteObject()
                {
                        Console.WriteLine( "One   Object   has   created ");
                }

                ~RemoteObject()
                {
                        Console.WriteLine( "One   Object   has   destroy ");
                }
                public   void   LongWorking(int   ms)


                {
                        Console.WriteLine( "RemoteObject:LongWorking()   Started ");
                        StatusEventArgs   e   =   new   StatusEventArgs( "Message   for   Client:LongWork()   Started ");
                        if(Status!=null)
                        {
                              Console.WriteLine( "RemoteObject:Firing   Starting   Event ");
                              Status(this,e);
                        }
                        System.Threading.Thread.Sleep(ms);
                        e.Message   =   "Message   for   Client   LongWorking   Ending ";
                        if(Status!=null)
                        {
                              Console.WriteLine( "RemoteObject:Firing   Ending   Event ");
                              Status(this,e);
                        }
                        Console.WriteLine( "RemoteObject   LongWorking()   Ending ");
                }
        }

        [Serializable]
        public   class   StatusEventArgs
        {
                private   string   message;
                public   StatusEventArgs(string   m)
                {
                        message   =   m;
                }

                public   string   Message
                {
                        get{
                                return   message;
                        }
                        set{
                                message   =   value;
                        }


                }
        }
}


Client

using   System;
using   System.Collections.Generic;
using   System.Text;
using   System.Runtime.Remoting.Messaging;
using   Remote;

namespace   Client
{
        class   Program
        {
                static   void   Main(string[]   args)
                {
                      Remote.RemoteObject   Shareobject   =   (Remote.RemoteObject)Activator.GetObject(typeof(Remote.RemoteObject),   "tcp://localhost:9090/Update ");   //125.45.61.205:9090
                      Console.WriteLine(Shareobject.GetHashCode().ToString());
                      EventSink   sink   =   new   EventSink();

                      Shareobject.Status   +=   new   RemoteObject.StatusEvent(sink.StatusHandler);
                     
                      Shareobject.LongWorking(5000);
                      Console.WriteLine(Shareobject.GetHashCode().ToString());
                      Console.ReadLine();
                }
        }

        public   class   EventSink   :   MarshalByRefObject
        {
                public   EventSink()
                {
                }

                public   void   StatusHandler(object   sender,   StatusEventArgs   e)
                {
                        Console.WriteLine( "EventSink:Event   occurred: "+e.Message);
                }
        }
}


为什么每次这个地方都运行到这句就报错
                      Shareobject.Status   +=   new   RemoteObject.StatusEvent(sink.StatusHandler);

Exception   has   been   thrown   by   the   target   of   an   invocation


请问怎么销毁远程对象

谢谢

[解决办法]
我先UP,晚上有空把你的代码拿出来调试一下,你Debug看那些变量是否是你预期的那样?
[解决办法]
mark

热点排行