2010-09-22 6 views
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, надежный сеанс решает проблему?

Заранее спасибо за Ваш ответ

ответ

3

Это зависит от связывания и конфигурации (для получения более подробной информации see here). И даже тогда надежность недолговечна.

Если вы хотите что-то надежное и прочным, вы можете посмотреть транзакционные очереди, например, через MSMQ (хотя доступны многочисленные технологии очереди). Вы даже можете отправить сообщение синхронно в очередь, так как вы ожидаете, что он будет доступен.

+0

Спасибо, что сдуло мои проблемы и решило мою проблему. У меня он настроен так, как говорится в статье из вашей ссылки (пользовательская привязка с надежным сеансом). Мне не нужен MSMQ, потому что у меня есть собственная процедура синхронизации после долгой недоступности клиента, и мне нужно знать, могу ли я разрешить кратковременную доставку сообщений. Теперь я знаю, так что еще раз спасибо. – Tobiasz