using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting.Channels;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Remoting.Channels.Http;
using System.Collections;
using Wayfarer.BroadCast.Common;namespace client
{
    class client
    {
        private IBroadCast watch = null;
        private EventWrapper wrapper = null;
        public client() {
            BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
            BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
            serverProvider.TypeFilterLevel = TypeFilterLevel.Full;
            IDictionary props = new Hashtable();
            props["port"] = 0;
            HttpChannel channel = new HttpChannel(props, clientProvider, serverProvider);
            ChannelServices.RegisterChannel(channel);            watch = (IBroadCast)Activator.GetObject(
                typeof(IBroadCast), "http://localhost:8080/BroadCastMessage.soap");            wrapper = new EventWrapper();
            wrapper.LocalBroadCastEvent += new BroadCastEventHandler(BroadCastingMessage);
            watch.BroadCastEvent += new BroadCastEventHandler(wrapper.BroadCasting);
        }
        public void BroadCastingMessage(string message)
        {
            Console.WriteLine ("I got it:" + message);
           // txtMessage.Text += System.Environment.NewLine;
        }        private void btnCancle_Click(object sender, System.EventArgs e)
        {
            watch.BroadCastEvent -= new BroadCastEventHandler(wrapper.BroadCasting);
            Console.WriteLine("取消订阅广播成功!");
        }
        static void Main(string[] args)
        {
            client cl = new client();
            Console.Read();
        }
    }}

解决方案 »

  1.   

    using System;
    using System.Windows.Forms;
    using System.Runtime.Remoting.Messaging;
    using Wayfarer.BroadCast.Common;
    namespace Wayfarer.BroadCast.RemoteObject
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    public class BroadCastObj:MarshalByRefObject,IBroadCast
    {
    public event BroadCastEventHandler BroadCastEvent;
    #region IBroadCast 成员
    //[OneWay]
    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++;
    }
    }
    }
    #endregion
    public override object InitializeLifetimeService()
    {
    return null;
    } }
    }
    AssemblyInfo.cs:using System.Reflection;
    using System.Runtime.CompilerServices;
    [assembly: AssemblyTitle("")]
    [assembly: AssemblyDescription("")]
    [assembly: AssemblyConfiguration("")]
    [assembly: AssemblyCompany("")]
    [assembly: AssemblyProduct("")]
    [assembly: AssemblyCopyright("")]
    [assembly: AssemblyTrade("")]
    [assembly: AssemblyCulture("")]
    [assembly: AssemblyVersion("1.0.*")]
    [assembly: AssemblyDelaySign(false)]
    [assembly: AssemblyKeyFile("")]
    [assembly: AssemblyKeyName("")]
      

  2.   

    using System;
    using System.Runtime.Remoting.Messaging;
    namespace Wayfarer.BroadCast.Common
    {
    /// <summary>
    /// EventClass 的摘要说明。
    /// </summary>
    public class EventWrapper:MarshalByRefObject
    {
    public event BroadCastEventHandler LocalBroadCastEvent; //[OneWay]
    public void BroadCasting(string message)
    {
    LocalBroadCastEvent(message);
    }
    public override object InitializeLifetimeService()
    {
    return null;
    } }
    }
    using System;namespace Wayfarer.BroadCast.Common
    {
    public delegate void BroadCastEventHandler(string info); public interface IBroadCast
    {
    event BroadCastEventHandler BroadCastEvent;
    void BroadCastingInfo(string info);
    }
    }
    using System.Reflection;
    using System.Runtime.CompilerServices;
    [assembly: AssemblyTitle("")]
    [assembly: AssemblyDescription("")]
    [assembly: AssemblyConfiguration("")]
    [assembly: AssemblyCompany("")]
    [assembly: AssemblyProduct("")]
    [assembly: AssemblyCopyright("")]
    [assembly: AssemblyTrade("")]
    [assembly: AssemblyCulture("")]
    [assembly: AssemblyVersion("1.0.*")]
    [assembly: AssemblyDelaySign(false)]
    [assembly: AssemblyKeyFile("")]
    [assembly: AssemblyKeyName("")]