如何知道用户是否按f5处理某些内容

时间:2013-09-23 06:21:57

标签: asp.net wcf concurrency

我有WCF服务来处理从rdlc文件呈现报告的请求。

我的问题: 用户打印报告,然后当处理中间时,用户按F5刷新。

结果,我们有两种可能的结果:

  1. 用户在处理上一个报告时仍会重新打印报告。

  2. 用户在处理完上一个报告时重新打印报告。

  3. 通过上述两种情况,我如何检测哪种情况适用?

1 个答案:

答案 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)
}

显然,如果在打印/等等过程中抛出异常,您需要确保报告不会“卡在”同步对象中...