Remoting远程处理事件调用的问题

Remoting远程处理事件调用的问题
在.NET Remoting技术中可以远程进行事件通知,但是我在使用时发现问题,提示信息为:
     不允许类型 System.DelegateSerializationHolder 和从中派生的类型(例如 System.DelegateSerializationHolder)在此安全级别上被反序列化。
但是我把安全级别设的很高,已经完全信任了,可是还是不行,不知道是怎么一回事?


所有的源代码如下:

RemoteObj dll的源代码:
  public class RemoteObj:MarshalByRefObject
    {
        public delegate void TaskCompleteEventHandler(object sender, TaskCompleteEventArgs e);
        public event TaskCompleteEventHandler TaskComplete;
        protected void OnTaskComplete(TaskCompleteEventArgs e)
        {
            if (TaskComplete != null)
            {
                TaskComplete(this, e);
            }
        }
        public void StartTask(int value)
        {
            Thread th = new Thread(new ParameterizedThreadStart((new RemoteObj()).DO));
            th.Start(value);
        }
        /**
         *传递的参数必须为object类型,否则编译出错
         **/
        private void DO(object value)
        {
            Thread.Sleep(1000);
            OnTaskComplete(new TaskCompleteEventArgs(value));
        }
    }
    [Serializable()]
    public class TaskCompleteEventArgs : EventArgs
    {
        public object Result;
        public TaskCompleteEventArgs(object result)
        {
            Result = result;
        }
    }
EventListener dll的源代码:

public class EventListener:MarshalByRefObject
    {
               public void TaskComplete(object sender, TaskCompleteEventArgs e)
        {
            Console.WriteLine("事件返回的值是:  " + e.Result.ToString());
        }
       /**
        * 重写生存期,限制为无限生存期,不会被释放的
        **/
        public override object InitializeLifetimeService()
        {
            return null;
        }
    }

Client客户端代码:
 
public class ClientEnd
    {
        static void Main(string[] args)
        {
            Invoke();
        }
        private static void Invoke()
        {
            EventListener listener = new EventListener();
            TcpChannel tcpChannel = new TcpChannel();  //使用Tcp信道
            ChannelServices.RegisterChannel(tcpChannel, false);
            RemoteObj obj = (RemoteObj)Activator.GetObject(typeof(RemoteObj),
        /**
         *   问题:
         * 在此安全基础上不成执行委托类型的反序列化,但是我已经配置了
         * 完全信任该程序集,怎么还不行呢,奇怪??
         **/
            obj.TaskComplete += RemoteObj.TaskCompleteEventHandler(listener.TaskComplete);
            obj.StartTask(100);
            Console.ReadLine();
        }
    }

Server服务端代码:

class ServerEnd
    {
        static void Main(string[] args)
        {
            Console.WriteLine("正在创建服务端连接.......");
            TcpChannel tcpChannel = new TcpChannel(8092);
            ChannelServices.RegisterChannel(tcpChannel, false);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObj),
                "RemoteObj", WellKnownObjectMode.SingleCall);
            Console.WriteLine("连接创建完毕,可以接收客户端调用了.....");
            Console.WriteLine("敲回车可以退出服务.....");
            Console.ReadLine();
        }
    }
有谁知道说一下.
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值