我需要在我的SilverLight应用程序退出时调用WCF服务进行更新。 它是一个浏览器外的应用程序,我正在使用SL4。
由于SL中的WCF仅用于异步,因此无法在Application.Exit上执行
我还尝试了MainWindow.Closing,它可用于OOB,但这也不起作用。
尝试使用线程锁定使Closing函数等待WCF完成回调,但它只是挂起。
有什么想法吗?
沙哈尔
答案 0 :(得分:0)
保存数据并在下次发布时提交
无论您使用什么平台,在退出时调用服务都是一个棘手的功能。您无法保证会发生这种情况,因为您的进程可能会在您出于多种原因(任务管理器,logff,关闭,蓝屏等)进行调用之前退出。如果您正在编写重要数据,例如系列中的最后一条记录,那么您最好将自己打开到部分数据集,最坏的情况下会损坏数据。
最好将所有服务器通信作为一次性事务处理。如果您在退出时提交的数据是用于记录或度量目的(例如,应用程序运行了多长时间,'foo'被调用了多少次),更好的模式是将数据连续保存到磁盘然后进行计算和放大;下次启动应用程序时提交数据。