将数据传递回回调,是否保证收到数据?

时间:2010-09-22 10:25:37

标签: c# wcf callback contract begininvoke

我的问题是:拥有一段代码(通过回调合同进行沟通)

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中启用了可靠的会话,可靠的会话是否解决了问题?

提前感谢您的回答

1 个答案:

答案 0 :(得分:3)

这取决于绑定和配置(更多详细信息see here)。即便如此,可靠性也是不耐用的。

如果您想要可靠的持久性,您可能需要查看事务性队列,例如通过MSMQ(尽管有许多队列技术可用)。您甚至可能希望同步发布到队列,因为您希望它可用。