【发布时间】:2012-06-21 16:14:20
【问题描述】:
我正在以发布-订阅模式编写 WCF 服务。
当有人发布事件时,我不想立即将其发送给所有客户。
我希望能够为每个客户检查是否需要通知该客户有关该发布的信息。
基本上,这将通过访问数据库并检查该客户端是否使用这些参数订阅了该特定事件来完成(不能提前完成,只需要针对数据库进行检查)。
目前我正在使用this List-Based Publish-Subscriber 示例,但它的工作方式是 - 当事件发布时 - 客户端会话被单独触发以发送消息。
所以现在,我正在改变这个:
public void PriceChangeHandler(object sender, PriceChangeEventArgs e)
{
_callback.PriceChange(e.Item, e.Price, e.Change);
}
到这里:
public void PriceChangeHandler(object sender, PriceChangeEventArgs e)
{
// Perform some database checks using BL if this client needs to be notified about this event
// Only if answer is YES - call the callback function on that client
_callback.PriceChange(e.Item, e.Price, e.Change);
// Also - send the client an EMAIL + SMS
_emailServer.SendEmail(e.Item);
_smsServer.SendSMS(e.Item);
}
两个问题:
这是正确的方法吗?我怎么知道“这个”客户是什么?客户是否应该以我将存储的“订阅”方法向我发送凭据? 或者我应该实现一个自定义的“UsernameValidator”来存储 Principal 吗?
难道我不应该有一个所有客户的静态列表,我将发送给我的 BL,而 BL 只会返回我必须向我发送消息的那些客户吗?
【问题讨论】:
标签: wcf publish-subscribe