簡體   English   中英

在ASP.NET頁面中執行批量處理

[英]Performing bulk processing in ASP.NET page

我們需要能夠在發生某些日期或滿足某些業務條件時發送自動電子郵件的功能。 我們正在設置此系統以與現有的ASP.NET網站一起使用。 我在這里與其他開發人員之一聊天,並討論了一些問題。

注意事項:

  • 我們需要的所有信息已經在ASP.NET網站中建模
  • 生成電子郵件需要一些業務邏輯,該邏輯也在網站中

我們認為理想的解決方案是擁有一個單獨的可執行文件,該可執行文件計划在一夜之間運行並進行處理和發送電子郵件。 該解決方案有兩個主要問題:

  • 如果網站已更新(業務邏輯或模型),但可執行文件被意外丟失,則可執行文件可能會停止發送電子郵件,或更糟糕的是,基於過時的邏輯發送電子郵件。
  • 我們都希望能夠使用像這樣利用用戶控件到模板中的電子郵件,我不相信這是可能的ASP.NET網站的外

使用構建和部署腳本可以避免第一個問題(無論如何,我們現在正在研究),但是我認為我們無法解決第二個問題。

因此,我們決定采用的解決方案是創建一個由SSIS定期調用的ASP.NET頁面,並進行一定量的處理(例如30秒),然后返回。 我知道ASP.NET頁面不是進行這種處理的理想位置,但這似乎最能滿足我們的要求。 我們考慮生成一個新線程(而不是從工作池中)進行處理,但是決定,如果這樣做,我們將無法使用返回的頁面來表示成功或失敗。 通過在頁面生命周期內進行處理,我們可以使用頁面內容來指示處理的過程。

所以問題是:此設置可能存在任何技術問題嗎?

顯然,如果您嘗試過這種方法,則任何成功/失敗的報告都將受到贊賞。 以及有關替代設置的建議。

干杯,

不要使用asp.net線程執行此操作。 如果該站點正在生成創建或觸發電子郵件發送所需的某些信息,則讓該站點將某些信息寫入文件或數據庫。

創建Windows服務或計划的進程,以從該文件或數據庫中收集所需的信息,並在完全獨立的進程/線程上運行電子郵件發送進程。

您要避免的是由於流程處理程序中的限制而導致站點崩潰或電子郵件發件人崩潰。 根據您在問題標題中使用“散裝”一詞,這兩個需要相互獨立。

我想你應該沒事。 幾年來,我們在公司中使用類似的方法,並且沒有很多問題。 有時需要一個多小時才能完成該過程。 最近,我們將第二個線程(如您所說)移到了單獨的服務器上。

將電子郵件程序和網站耦合在一起可以正常工作,但這並不是一個好的設計,從長遠來看,它將為您提供更多維護。 您可以通過做一些事情來解決所陳述的問題。

  1. 將通用業務邏輯移至Web服務或通用庫。 您的網站和可執行文件/ WCF服務都可以使用它,並且可以集中邏輯。 如果您要復制和粘貼代碼,則知道有問題;)

  2. 如果您需要模板郵件程序,則可以調用ASP.Net類為您動態創建頁面(請參閱BuildManager類,以及類似此類的博客文章 。如果郵件程序不依賴Page事件(它不依賴於頁面事件),似乎),您的可執行文件從網站程序集中加載Page類,動態構建它並填充內容應該沒有任何問題。

顯然,這代表了大量工作,但將為您帶來更可擴展的解決方案。

聽起來您應該創建一個工作線程來完成該工作。

當滿足某些業務條件時,您可以並且應該在域邏輯(這表示您的asp.net應用程序)中構建消息正文(模板消息正文),並將其發送到僅發送消息的外部服務。 所有消息將具有正確的信息。

對於“某些日期發生”的情況,您可以對后台任務使用簡單的解決方案(查看Craig答案),並執行與上述相同的操作:解析模板,構建消息並快速發送到指定的服務。

當然,您應該這樣做安全,然后重新啟動應用程序池不會破壞您的任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM