1

私の質問は:そのようなコードの一部を持っている(コールバック契約を介した通信)

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で信頼できるセッションを有効にしていますが、信頼できるセッションで問題は解決しますか?

よろしくお願いします

4

1 に答える 1

3

バインディングと構成によって異なります (詳細については、こちらを参照してください)。それでも、信頼性は非耐久性です。

信頼性耐久性に優れたものが必要な場合は、MSMQ などを使用したトランザクション キューを検討することをお勧めします (ただし、多数のキュー テクノロジが利用可能です)。キューが利用可能であることを期待しているため、キューに同期的に投稿することもできます。

于 2010-09-22T11:41:16.590 に答える