背景:我试图将由Sync Services for ADO 1.0 DBServerSyncProvider触发的服务器端ApplyChangeFailed事件转发给客户端。 Sync Services冲突解决的所有代码示例都不使用WCF,并且当客户端直接连接到服务器数据库时,此问题不存在。然而,我的DBServerSyncProvider是由无头WCF服务包装的,我无法向用户显示包含违规数据的对话框以供审阅。WCF嵌套回调
因此,显而易见的解决方案似乎是将Sync Services生成的HTTP WCF服务转换为TCP,使其成为双工连接,并在接收SyncConflict对象的客户端上定义回调处理程序,并设置Action属性事件。
当我这样做,我得到一个运行时错误(试图回调前):
System.InvalidOperationException:此操作会死锁,因为不能接受 答复,直到当前的消息完成处理。如果 您希望允许乱序消息处理,请在CallbackBehaviorAttribute中指定 Reentrant或Multiple的并发性模式。
所以我做了什么消息建议和装饰的服务和多个属性的回调行为。然后运行时错误消失了,但是调用导致“死锁”并且从不返回。我该怎么做才能解决这个问题?在原始服务调用返回之前是否有可能返回客户端的WCF服务?
编辑:我认为this可能是问题的解释,但我仍然不知道正确的解决方案应该是什么。
通过一些想这更多的,我意识到我帖子中的链接背后的线索对此问题有很好的推理。问题不在于回调必须在单独的线程中进行。由于它在服务器上运行,因此这不相关。客户端发生死锁。我会用我的代码发布答案。 – cdonner 2009-06-15 14:08:51