Фон: я пытаюсь переслать серверное событие ApplyChangeFailed , которое запускается службами синхронизации для ADO 1.0 DBServerSyncProvider, клиенту. Все примеры кода для разрешения конфликтов служб Sync не используют WCF, и когда клиент подключается к базе данных сервера напрямую, этой проблемы не существует. Однако мой DBServerSyncProvider упакован безголовой службой WCF, и я не могу показать пользователю диалог с ошибочными данными для просмотра.
Таким образом, очевидным решением, по-видимому, является преобразование службы HTTP WCF, созданной службами синхронизации, в TCP, создание дуплексного соединения и определение обработчика обратного вызова на клиенте, который получает объект SyncConflict , и устанавливает свойство Action события.
Когда я это сделал, я получил ошибку во время выполнения (до попытки обратного вызова):
System.InvalidOperationException: эта операция блокируется, потому что
ответ не может быть получен, пока текущее сообщение не завершит обработку. Если
Вы хотите разрешить обработку сообщений вне очереди, укажите ConcurrencyMode
Повторно ввести или несколько в CallbackBehaviorAttribute.
Итак, я сделал то, что предлагалось в сообщении, и украсил и сервис, и поведение обратного вызова атрибутом Multiple. Тогда ошибка выполнения исчезла, но вызов приводит к «тупику» и никогда не возвращается. Что мне делать, чтобы обойти это? Разве невозможно иметь службу WCF, которая перезванивает клиенту до возврата исходного вызова службы?
Редактировать: Я думаю, это могло бы быть объяснением проблемы, но я все еще не уверен, каким должно быть правильное решение.