2011-03-02 59 views
0

我的WCF服務(託管的Windows服務),有一些「SendEmail」的方法,其中做了一些處理後發送出去的電子郵件。現在WCF服務 - 發送回對象調用應用程序

,我有哪裏的客戶想要預覽電子郵件被髮送出去之前,他們另外一個要求,所以我的WCF服務需要整個電子郵件對象返回到調用的Web應用程序。 如果客戶對電子郵件對象感到滿意,他們只需點擊「發送」,然後再次調用WCF服務發送電子郵件。

因爲有時它可能需要更長的時間用於電子郵件對象processingy,我不想調用應用程序要等到郵件對象已準備就緒。

任何人都可以請指導什麼樣的變化,我需要讓我的WCF服務(目前有單向的操作)?

另外,請指導我,我是否需要去非同步操作或消息隊列,也可以是雙面合同?

謝謝!

回答

1

根據您的描述,我認爲你必須:從發送電子郵件到存儲電子郵件(可能在數據庫中)

  • 更改當前的操作。
  • 添加其他操作以檢索當前用戶的準備好的電子郵件
  • 添加其他方法以確認發送一封或多封電子郵件並將其從存儲中刪除。

的方法將是:

  1. 用戶將觸發一些http請求,這將導致在要求的處理(第一操作)WCF服務
  2. WCF服務將啓動一些處理(異步或firt操作將是單向的,以便客戶不必等待)。
  3. 處理將保存電子郵件莫名其妙地
  4. 依靠處理您可以使用AJAX來輪詢Web應用程序,這將在準備電子郵件或反過來投票WCF服務,你會創建單獨的頁面,它將用戶具有訪問,看看準備電子郵件的時間。兩種方法都使用第二種操作。
  5. 用戶將檢查準備電子郵件(S)和觸發HTTP請求,這將導致在調用第三操作來發送這些電子郵件。
+0

謝謝拉迪斯拉夫,是的,這是它應該如何工作。一個查詢,如果我將排隊/保存請求發送到數據庫部分,如何啓動一個異步方法以便報告服務從隊列獲取第一個請求來處理,我應該爲此啓動一個新線程嗎? – iniki 2011-03-03 14:52:51

+0

這是否意味着您只想在任何特定時間處理單個請求? – 2011-03-03 14:57:41

+0

是的,這麼認爲。因爲一旦請求被保存到數據庫或排隊,客戶端可以愉快地繼續其他東西...所以服務應該從隊列中取出第一個未處理的作業並開始處理它。我應該怎麼做,我的服務從隊列中選擇工作並開始處理?另外,順便說一句,有可能從隊列中處理多個作業進行處理? – iniki 2011-03-03 15:15:54

1

你有多種選擇:

  • 使用拉吉斯拉夫的做法。只有添加該服務纔會返回令牌,然後客戶端使用該令牌進行輪詢,直到超時或成功響應。此外,服務器會將這些臨時電子郵件保留一段時間,並在超時後清除它們。
  • 使用雙工通信,以便服務器也可以回調客戶端,並在完成處理時執行此操作。 但是不要這樣做 - 這裏是my view爲什麼不。
  • 使用異步方法。你可以找到很好的信息here
+0

不要使用雙工從ASP.NET應用程序,它不會工作:http://stackoverflow.com/questions/5157091/problem-with-using-wcf -callback和-ASP-淨值與實現 - 發佈 - 訂閱,拍打/ 5157324#5157324 – 2011-03-02 19:19:36