win200s0server,服务器wellknow形式、singlecall模式注册,客户端第一次访问没有什么问题,当客户端关闭以后,第二次打开客户端,服务器不动,客户端访问也没有问题,但是关闭客户段,服务器端就出错,说是内存0x~~~~~~~~~~~~~~~~不能为written.不知道什么原因,请高手指点!
  我关闭客户端的时候没有做任何注销客户的方法,估计是重新注册代理类的时候出现问题,不知道如何在客户端关闭的时候注销远程代理类????

解决方案 »

  1.   

    做法有三个!!
    第一,客户端退出时必须注册通道
    第二,在中间传递的方法或事件中加入[OneWay]属性,可以出错自动放弃
    第三,在中间传递的DLL的方法或事件中加入Try-Catch语句,处理异常,并注销没有通道
    方法的catch很简单,这里不说了,说一下事件的catch
    下面是一个事件调用的例子了,请参考一下
    public void BroadCastingInfo(string info)
    {
    if (BroadCastEvent != null)
    {
    BroadCastEventHandler tempEvent = null; int index = 1; //记录事件订阅者委托的索引,为方便标识,从1开始。
    foreach (Delegate del in BroadCastEvent.GetInvocationList())
    {
    try
    {
    tempEvent = (BroadCastEventHandler)del;
    tempEvent(info);
    }
    catch
    {
    MessageBox.Show("事件订阅者" + index.ToString() + "发生错误,系统将取消事件订阅!");
    BroadCastEvent -= tempEvent;
    }
    index++;
    }
    }
    else
    {
               MessageBox.Show("事件未被订阅或订阅发生错误!");
    }
    }