2013-09-23 75 views
2

我有WCF服務來處理從rdlc文件呈現報告的請求。我如何知道用戶是否按f5或不要處理

我的問題: 用戶打印的報告,然後當處理是在中間,用戶按下F5刷新。

結果,我們有兩種可能的結果:

  1. 用戶重印時,上次報告的處理仍在運行報告。

  2. 用戶在處理完上一個報告時重新編寫報告。

有了上述兩種情況,我該如何檢測哪一種適用?

+0

報告打印客戶端(例如通過服務與PrintMe()JavaScript)或服務器端的PDF? – Basic

+0

該報告由WCF服務呈現,並在服務器上 – TPL

回答

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

顯然你需要確保的報告沒有得到「卡」在syncobject如果異常拋出時打印/等...

+0

如果我用你的方式,當用戶A呈現報告時,用戶B必須等待或不需要?(糾正我,如果我錯了) – TPL

+0

這取決於。我沒有放入用戶特定的代碼,但這樣做很簡單。只需讓'SyncObject'跟蹤'UserId'以及... – Basic

相關問題