就是订阅 之类的问题。 我自己写的程序出问题,然后 就 干脆把 网上的程序 直接拷贝了用,还是出问题。
 发布模式都是 Singleton,信道也做过处理( TypeFilterLevel = TypeFilterLevel.Full), 当Issuer 使用方式一的时候就失败,但是使用方式二 就成功, 使用方式一的时候 错误信息是: 
System.Runtime.Serialization.SerializationException: Cannot find the assembly EventSubscriber, Version=1.0.2109.39469, Culture=neutral, PublicKeyToken=null.EventSubscriber是 工程名, 里面一个类就是 Subscriber , 另外一个工程是 EventIssuer, 饱含一个类是 Issuer ,最后一个就是EventClient工程, public class Subscriber : MarshalByRefObject
{
/// <summary>
/// Subscribe event from server.
/// </summary>
public void Subscribe(string argMessage)
{
Debug.WriteLine(argMessage);
}}public class Issuer : MarshalByRefObject
{
public delegate void Notify(string argMessage); public event Notify NotifyEvent; public Issuer()
{
} /// <summary>
/// Event happen.
/// </summary>
public void Happen()
{
Debug.WriteLine("Event happened.");
if (null != NotifyEvent)
{
NotifyEvent("Has suscribers.");
}
}
}class MainClass
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
             Subscriber subscriber = (Subscriber)Activator.GetObject(typeof(Subscriber), 
             "http://localhost:1000/Subscriber");             subscriber.Subscribe("123");   // ******  运行到这里正常  Subscriber正确的打印了信息(123)

             Issuer issuer = (Issuer)Activator.GetObject(typeof(Issuer),     // ********* 方式一
                   "http://localhost:1080/Issuer");             // Issuer issuer = new Issuer();                                // ********* 方式二             issuer.Happen();              // ******  运行到这里也正常,Issuer 正确的打印了信息(Event happened.)             if (subscriber != null && issuer != null)
             {
                    // ****** 当使用方式一的时候, 下面这一句出错
            issuer.NotifyEvent += new EventIssuer.RemoteObject.Issuer.Notify(subscriber.Subscribe);                     // ****** 当使用方式一的时候, 下面这一句不会被执行到。
                    // ****** 使用方式二的时候下面这句被正常执行
                    // ****** 并且,Issuer 正确的打印了信息(Event happened.) 
                    // ****** Subscriber也 正确的打印了信息(Has suscribers.)。
            issuer.Happen();
             }
        }
}

解决方案 »

  1.   

    你这行代码有点问题
    issuer.NotifyEvent += new EventIssuer.RemoteObject.Issuer.Notify(subscriber.Subscribe); 
    你用subscriber.Subscribe的方法就是为能让事件顺利被执行,所以subscriber的类是不用被注册的,只是用来做一个事件的中介,不用在服务端注册这个类,不然就不行了!!因为出于安全理由,客户端不用直接调用服务端的事件,必须中过中介类或另一个类的虚方法,再在客户端覆盖这个方法来实现!所以上面要改的
    第一,不用在服务端注册Subscriber类
    第二,Subscriber类中做一个调用Issuer类的事件,所以想真正调用到Issuer类的事件就必须在Subscriber添加一个事件,并在它的Subscribe方法中加入触发此事件的代码,再在客户也订阅一个Subscribe类的新增事件就可以顺序接收到Issuer类的事件了!
      

  2.   

    To Flashcom(虫虫) 
    不太明白你的意思
      

  3.   

    我详细看过你的代码,你的mainclass是客户端是吗?我发现你的问题应该是在服务器的配置上有问题,由于你没有贴出来,我只是猜的.
    因为你用Debug.WriteLine是试不出来的,请用Console.Writeln()吧!!
    首先要明白一点,这是远程调用,也就是客户调用,服务器执行,也就是说执行Debug.WriteLine的是服务器端,不是客户端,你说能显示出Debug.WriteLine的代码,那时服务器是在Debug的吗?你是否是在客户端执行了Debug.WriteLine,如果是就不正确了!这样的话应该是服务器配置远程类时有问题!