.net romoting 的EventWrapper类
注意:防火墙的问题
---------------------------------------------------
//定义广播服务接口
[Serializable]
public delegate void BroadCastEventHandler(string info);
public interface IBroadCastService
{
event BroadCastEventHandler BroadCastEvent;
void BroadCastingInfo(string info);
}
//事件封装类
[Serializable]
public class EventWrapper : MarshalByRefObject,IRegisterSelf
{
public event BroadCastEventHandler LocalBroadCastEvent;
//[OneWay]
public void BroadCasting(string info)
{
if (LocalBroadCastEvent != null)
{
//LocalBroadCastEvent(message);
BroadCastEventHandler tempEvent = null;
int index = 1; //记录事件订阅者委托的索引,为方便标识,从1开始。
foreach (Delegate del in LocalBroadCastEvent.GetInvocationList())
{
try
{
tempEvent = (BroadCastEventHandler)del;
tempEvent(info);
}
catch(Exception ee)
{
errorlog.WriteLine(ee.ToString());
errorlog.WriteLine("事件订阅者" + index.ToString() + "发生错误,系统将取消事件订阅!");
LocalBroadCastEvent -= tempEvent;
}
index++;
}
}
else
{
errorlog.WriteLine("EventWrapper中代理本地BroadCast事件为空!");
}
}
public override object InitializeLifetimeService()
{
return null;
}
#region IRegisterSelf 成员
public void RegisterSelf()
{
RemotingConfiguration.RegisterWellKnownServiceType(typeof(EventWrapper), "EventWrapper", WellKnownObjectMode.Singleton);
}
#endregion
}
[Serializable]
public class BroadcastEventArgs : EventArgs
{
private string msg = null;
public BroadcastEventArgs(string message)
{
msg = message;
}
public string Message
{
get { return msg; }
}
}