2015-11-06 48 views
0

這是一個理論問題。在同一個項目中使用webservice或使用代碼處理它?

想象一個aspnet網站。通過點擊一個按鈕站點發送mail.now:

  • 我可以發郵件與異步代碼
  • 我可以用QueueBackgroundWorkItem
  • 發送郵件我可以調用單向Web服務位於同一網站
  • 我可以打電話給位於其他網站(或另一個子域名)的ONEWAY webservice

上述解決方案都不會等待郵件操作完成,因此它們都可以。

我的問題是爲什麼我應該使用服務解決方案而不是其他解決方案。有優勢嗎?

第四個解決方案增加了額外的tcpip流量使用服務其效率不高?

如果是這樣,在同一網站(第三解決方案)下使用服務也會產生額外的流量。那是對的嗎 ?

我需要了解爲什麼人們在同一個網站下使用服務?除了向ajax調用提供某些東西外,還有什麼理由嗎?

任何信息都會很好。我真的需要得到意見。 最好

回答

2

最合適的架構將取決於幾個因素:

  1. 需要發送

  2. 需要重用超越所描述的用例的電子郵件發送功能的電子郵件容量

  3. 代碼的實現,部署和維護的簡單性

在同一個或另一個Web應用程序中分隔服務中的電子郵件發送將使其可用於其他應用程序和客戶端代碼。它還增加了調用服務的代碼的一些複雜性,因爲它需要處理服務不可用時的情況,並處理髮出呼叫時可能發生的錯誤。

如果發送的電子郵件的量非常大,可以使用單獨的Web應用程序進行服務,因爲它允許將工作卸載到一個或多個服務器(如果需要)。根據給出的用例(用戶點擊一個按鈕),這似乎不太可能,除非網站會有非常大的流量。最初並且隨着時間的推移,創建單獨的Web應用程序會增加重要的開發,部署和維護工作

除非要發送的電子郵件的數量真的很大(每天幾百萬),或者需要在其他系統中重複使用電子郵件功能,在同一個Web應用程序中創建電子郵件發送功能(前兩個選項這個問題)幾乎肯定是最好的選擇。這將導致最少的初始工作,易於部署,並且(可能最重要的是)將是最容易維護的。

實施電子郵件發送功能時需要重點關注的一個重要問題是穩健性問題。穩健性可以通過任何可能的架構來實現,並且與問題強調的問題有所不同。但是,如果(1)接收SMTP拒絕接收郵件(例如,郵箱已滿;不存在帳戶;作爲垃圾郵件拒絕)以及(2)NDR在消息被髮送(例如,拒絕爲垃圾郵件)。根據發送的電子郵件類型,可能忽略這些錯誤或者可能需要一些糾正措施(例如,重試發送,在發送電子郵件時提醒用戶......)

+0

所以你說只要它適合您的需求,不用擔心性能,並使用您喜歡的任何方法。如果您喜歡簡單或Web服務呼叫甚至是篝火,它可以是本地代碼解決方案。 – AykutCanturk

+0

是的,最好讓它保持簡單,並用你所知道的東西進行阻止。 – HashPsi