Построение надежного сервиса в WCF - PullRequest
0 голосов
/ 14 апреля 2011

В настоящее время я разрабатываю сервис (wsHttp), который должен использоваться для возврата конфиденциальных данных.Как только клиент запрашивает эти данные, я получаю их из базы данных, составляю список, затем удаляю данные из базы данных и возвращаю список.

Меня беспокоит, что что-то происходит на пути кклиент (проблемы с сетью, ...) Я уже удалил данные из базы данных, но клиент никогда их не получит.

Какое из готовых решений у меня есть здесь?

Ответы [ 3 ]

1 голос
/ 14 апреля 2011

Это внутренняя проблема распределенных вычислений. Простого решения не существует. Вопрос в том, насколько важно восстанавливаться после таких ошибок.

Например, если кто-то удаляет некоторые записи, но клиент отключается, при следующем подключении онувидит эти записи как удаленные.Даже если он попытается удалить их снова (данные остались в пользовательском интерфейсе), это не принесет вреда.

Для банков, переводящих деньги, у них есть механизм устранения ошибок, в котором они сопоставляют транзакции, которые произошли между ними ввторой процесс.Конфликты будут обрабатываться вручную.

Некоторые системы, такие как NServiceBus , полагаются на MSMQ для хранения сообщений и возможная согласованность , когда сообщение, предназначенное клиенту, в конечном итоге будет поступать всякий раз, когда онснова подключен.

1 голос
/ 14 апреля 2011

Для этого не существует готового решения. Вам нужно будет реализовать некоторую форму пользовательского / автоматического подтверждения того, что данные были получены, и удалять только после того, как они будут возвращены.

Эд

0 голосов
/ 24 ноября 2013

Существует простое решение. Но оно не входит в коробку.

Протоколы, такие как WS-ReliableMessaging (или, в равной степени, TCP / IP), обеспечивают уровень надежности при обмене сообщениями, но все ставки отключаются, как только этот уровень выгружает сообщение на уровень выше.

Таким образом, надежность может быть полностью решена только на самом верхнем уровне - прикладном уровне, а не на каком-либо нижнем уровне стека связи.Это делает бизнес первоклассным, а не чисто техническим.

Проблема может быть решена с небольшим изменением процесса удаления конфиденциальных данных.

Вместо немедленного удаленияпометить для удаления.Затем встроите в бизнес-процессы, которые управляют вашим сервисом, утверждение о том, что клиент должен подтвердить получение конфиденциальных данных.Затем, когда вы получите подтверждение обратно, вы можете безопасно удалить данные, помеченные для удаления, зная, что они были получены.

Я недавно написал сообщение в блоге , полагая, что надежность - это первый классбизнес-проблема, которая не может быть выгружена на нижний уровень.

...