2010-05-11 80 views
2

我有一個應用程序構建,點擊一個按鈕後點擊第三方公司的Web服務,以創建一個電子郵件帳戶。但是,有時Web服務需要超過1分鐘的響應時間,這是我的客戶等待響應的方式。如何創建一個隊列

我需要設計一種方法來設置網站外部的某種排隊服務。這樣我可以將Web服務操作添加到隊列中,並建議客戶創建該帳戶可能需要2分鐘。

我很好奇最好的方法來實現這一目標。我最初的想法是通過數據庫表來請求操作,該數據庫表將通過Windows計劃任務運行的控制檯應用程序定期檢查。

該方法的任何問題?

有沒有更好的方法可以想到?

+2

您可以查看BackgroundWorker並生成一個將在後臺完成的線程,同時繼續處理用戶頁面請求。 – Lazarus 2010-05-11 18:03:35

+1

我擔心你的問題有點模糊,因此......你能更具體地回答這個問題嗎? – 2010-05-11 18:04:49

+0

將新的隊列()是一個可接受的答案? :p – 2010-05-11 19:21:57

回答

10

我會使用MSMQ,它可能是一個較舊的技術,但它非常適合您描述的場景。

+0

MSMQ仍在積極開展工作。 MSMQ 5剛剛與Win7和W2K8 R2一起發佈。 – 2010-05-11 18:09:18

+0

請注意,如果您願意,可以通過WCF使用MSMQ。 – 2010-05-11 18:22:42

+0

另外,要使用MSMQ,您將不得不安裝它,因爲它沒有默認完成。它確保消息傳遞等,這可以很好地工作。 – 2010-05-11 18:24:25

1

創建一個WCF服務來管理隊列及其操作。在服務上暴露一個方法來向隊列添加一個動作。

這種方式隊列是完全獨立於您的網站。

1

如果您使用AJAX和Windows Service的組合,該怎麼辦?

在網站端:當用戶選擇創建電子郵件帳戶時,將請求添加到數據庫表。如果他們想等待,請提供一個使用AJAX的網頁來檢查每一次(10秒?)他們的帳戶是否已創建。如果它是一個應用程序樣式的網站,您可以讓它們繼續工作,並在帳戶創建後彈出消息。如果他們不想等待,他們會關閉頁面或瀏覽另一個頁面,一旦完成,可能會收到一封電子郵件。

在處理方面:創建一個Windows服務來檢查表中的新請求。一旦完成請求,它必須以某種方式與用戶進行通信,也許可以通過在請求上設置狀態標誌。這就是AJAX調用的要求。您現在也可以發送電子郵件。

如果您使用控制檯應用程序而不是Windows服務的計劃任務,則可能會同時運行多個實例。您必須實施某種鎖定機制(在應用程序或請求級別)以防止兩次處理同一事物。

+0

我所學的東西。您不必每隔x秒輪詢一次。使用長輪詢,彗星,反向ajax,無論你想調用它。它在技術上仍然是一項民意測驗,但服務器會保持連接狀態直到有數據。 AJAX是異步的,所以保持打開狀態不是問題。 – 2010-05-11 19:26:24

0

不幸的是,您的問題太模糊,無法回答任何真實的細節。如果這是你想要在主應用程序之外進行管理的話,那麼Windows服務將會更合適一些,然後創建一個控制檯......從集成和生命週期管理的角度來看,這爲添加其他功能提供了一個很好的基礎(例如性能計數器,託管WCF中的管理服務,Remoting等)。儘管部署涉及更多,但MSMQ很棒。如果你願意投入時間,那麼使用MSMQ有很多優勢。如果你真的想創建自己的點對點隊列,那麼網上有很多例子可以作爲一個例子。這裏是一個,http://www.smelser.net/blog/page/SmellyQueue-(Durable-Queue).aspx