我有 WCF 服务来处理从 rdlc 文件呈现报告的请求。
我的问题:用户打印报表,然后在处理过程中,用户按 F5 刷新。
结果,我们有两种可能的结果:
当前一个报告的处理仍在运行时,用户重新打印报告。
用户在完成上一份报告的处理后重新打印报告。
对于上述两种情况,我如何检测哪一种适用?
我有 WCF 服务来处理从 rdlc 文件呈现报告的请求。
我的问题:用户打印报表,然后在处理过程中,用户按 F5 刷新。
结果,我们有两种可能的结果:
当前一个报告的处理仍在运行时,用户重新打印报告。
用户在完成上一份报告的处理后重新打印报告。
对于上述两种情况,我如何检测哪一种适用?
从根本上说,您需要一种在请求之间进行同步的方法。这最初是不可能的,因为您的任何服务实例都没有相互引用。
您可以做的是用您自己的. 这将使您能够控制服务实例的实例化方式。
然后你有几个选择
所以你的打印方法看起来像(伪):
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)
}
显然,如果在打印/等期间抛出异常,您需要确保报告不会“卡在”同步对象中......