【IT168 技术文档】
上一篇文档:WCF中的发布-订阅服务(上)
事件发布
目前介绍的发布-订阅框架只包含处理订阅管理的一部分。该框架同样可以简化发布服务的实现。发布服务必须支持与订阅者相同的事件契约,这是获知应用程序的发布者的唯一连接点。因为发布服务在端点中暴露了事件契约,我们需要将事件契约标记为服务契约。假定我们只是通过双向回调使用临时订阅者:
[ServiceContract]发布-订阅框架包含了辅助类PublishService<T>,定义如下:
interface IMyEvents
{
[OperationContract(IsOneWay = true)]
void OnEvent1( );
[OperationContract(IsOneWay = true)]
void OnEvent2(int number);
[OperationContract(IsOneWay = true)]
void OnEvent3(int number,string text);
}
public abstract class PublishService<T> where T : classPublishService<T>定义了一个类型参数,它的类型为事件契约。若要提供开发者自己的发布服务,可以继承PublishService<T>,然后使用FireEvent()方法将事件传递给所有订阅者,不管它们是临时订阅者还是持久订阅者,如例B-5所示。
{
protected static void FireEvent(params object[] args);
}
例B-5 实现一个事件发布服务
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
class MyPublishService : PublishService<IMyEvents>,IMyEvents
{
public void OnEvent1( )
{
FireEvent( );
}
public void OnEvent2(int number)
{
FireEvent(number);
}
public void OnEvent3(int number,string text)
{
FireEvent(number,text);
}
}