2011-08-22 43 views
0

我有一個Windows服務託管的WCF服務。我希望網站能夠異步調用它,然後當工作完成時,WCF服務會讓網站知道結果。我已經看到了實現這一目標的各種方式,但我希望得到一些更好的建議。我研究過使用回調函數,但也可以讀取它們不可靠。我已經讀過關於不這樣做的方法,只是在我的服務中爲網站​​提供另一個接口來查詢狀態。我已經看過使用MSMQ,它現在看起來像我喜歡的方式,但想要了解如何設置它的更多信息,或者我不應該這樣做。網站調用帶回調的Windows服務

有沒有人有任何建議嗎?

+0

這是一個奇怪的想法。一個網站不是一個程序,服務器上沒有持續的存在。回調如何適應請求/響應模型? –

+0

@亨克霍爾特曼:是的,實際上。你在考慮網站的客戶,而不是網站本身。在['HttpApplicationState'](http://msdn.microsoft.com/en-us/library/system.web.httpapplicationstate.aspx)中將代理存儲到WCF服務將非常容易。 – casperOne

回答

2

網絡上任何通信的性質都是不可靠的。聲明:

我已經研究過使用回調,但也看到,他們是不可靠的

假設你的意思是WCF回調,它們本身是不可靠的客戶機/服務器,它們都使用同樣的機制。也就是說,您可以將您的WCF服務的客戶端存儲在HttpApplicationState(如果該調用是應用程序範圍內的)或HttpSessionState(如果該調用是會話本地的)。

生成代理時,請確保您檢查選項(或在合同上指定)使用異步調用。

然後,您將使用回調(委託)指示何時完成異步調用。

當呼叫完成後,您會將結果存儲在會話狀態中。

如果這是前端客戶端需要注意的事情,那麼瀏覽器必須輪詢您的站點,檢查返回結果,重定向到可以在結果顯示結果時顯示結果的頁面填充。

1

選擇爲您的應用結合取決於

  1. 架構應用程序的
  2. 要求需要或不
  3. 互操作性。的時間的應用
  4. 可用性
  5. 響應時間來實現你正在使用或希望使用
  6. 基礎設施。

由於您的應用程序是一個Web應用程序,並且建立在請求/響應模型上,因此您將無法使用異步或msmq樣式用於此架構(或不建議使用),因爲不會有任何線程列表中的延遲異步響應或msmq調用。 您可以使用單向方法和直接調用方法。在這種情況下,爲了減少響應時間,您必須設法優化服務方法和正在執行的處理。