我有WCF服务来处理从rdlc文件呈现报告的请求。
我的问题: 用户打印报告,然后当处理中间时,用户按F5刷新。
结果,我们有两种可能的结果:
用户在处理上一个报告时仍会重新打印报告。
用户在处理完上一个报告时重新打印报告。
通过上述两种情况,我如何检测哪种情况适用?
答案 0 :(得分:1)
从根本上说,您需要一种在请求之间进行同步的方法。这最初不可能,因为您的服务实例都没有相互引用。
你可以做的是replace the default dependency resolver with your own。这将使您可以控制服务实例的实例化方式。
然后你有了几个选择
所以你的打印方法看起来像(伪):
public ReturnType PrintReport(ReportId, UserId) {
If This.SyncObject.ReportRunning(ReportId, UserId) {
//Whatever you want - throw an exception? Wait for running report to finish?
}
This.SyncObject.AddReport(ReportId, UserId)
//Process as usual
This.SyncObject.RemoveReport(ReportId, UserId)
}
显然,如果在打印/等等过程中抛出异常,您需要确保报告不会“卡在”同步对象中...