我的问题是:拥有一段代码(通过回调合同进行沟通)
private void BroadcastMessage(DataEventArgs e)
{
DataEventHandler temp = DataEvent;
if (temp != null)
{
foreach (DataEventHandler handler in temp.GetInvocationList())
{
handler.BeginInvoke(this, e, EndAsync, null);
}
}
}
和回调合约
interface IDataCallback
{
[OperationContract(IsOneWay = true)]
void EntityUpdateReceived(Entity entity);
[OperationContract(IsOneWay = true)]
void EntitiesUpdateReceived(List<Entity> entities);
[OperationContract(IsOneWay = true)]
void EntityDeleteReceived(Entity entity);
[OperationContract(IsOneWay = true)]
void EntitiesDeleteReceived(List<Entity> entities);
[OperationContract(IsOneWay = true)]
void SendLogOffMessage(string message);
[OperationContract(IsOneWay = true)]
void Logoff();
[OperationContract(IsOneWay = true)]
void UpdatePlan(int userId);
}
我是否确信该消息将成功地向所有客户广播,即使有一些,让我们说路上有网络问题?我的意思是,服务是否会自动尝试一次又一次地传递消息,直到成功为止,假设客户端始终连接,但在首次交付时出现了一些问题。我问,因为我不知道是否必须编写额外的代码才能保证 (服务客户端确认消息等)我在app.config中启用了可靠的会话,可靠的会话是否解决了问题?
提前感谢您的回答
答案 0 :(得分:3)
这取决于绑定和配置(更多详细信息see here)。即便如此,可靠性也是不耐用的。
如果您想要可靠的和持久性,您可能需要查看事务性队列,例如通过MSMQ(尽管有许多队列技术可用)。您甚至可能希望同步发布到队列,因为您希望它可用。