【发布时间】:2011-09-07 12:46:57
【问题描述】:
场景:
我正在开发一个基于 Web 的应用程序。在我的应用程序中,用户向撰稿人请求文章写作服务。然后文案将继续创作并将文章提交给客户。然后客户可以批准或拒绝文章。所有这些操作都有状态。
业务问题:
01.我需要(下面给出的示例操作)
02.当文章状态发生变化时发送通知(电子邮件)。
03.根据他们在数据库中的表现(例如:拒绝与批准)更新撰稿人的个人资料。
04.如果某篇文章被拒绝x次,通知应用管理员。
05.未来可能会增加更多的业务逻辑。
基本上所有流程都是电子邮件发送或数据库调用。
我的方法:
我在中间层想出了一个功能(是的,我的应用是 3 层。)。
Public Sub ExecuteWorkFlow(ByVal requestid As Integer, ByVal oldStatus As ServiceStatus, ByVal newStatus As ServiceStatus)
Try
If oldStatus.Value = ServiceStatus.InProgress Then
If newStatus = ServiceStatus.PendingReview Then
'Update Logic
ElseIf newStatus = ServiceStatus.Completed Then
'Update Logic
End If
End If
'Check for rejected work flow. Send email to copywriters (and us if 3 rejection)
If newStatus = ServiceStatus.Rejected Then
If oldStatus.Value = ServiceStatus.PendingReview Then
'send email
SendRejectServieRequestEmail()
Dim rejects = From r In request.ServiceRequestHistory Where r.NewStatus = ServiceStatus.Rejected Select r
If rejects.Count() >= 3 Then 'Send email to admin
'send email
SendRejectServieEmailToAdmin()
End If
End If
End If
End If
'Check for new job workflow. Send emails to providers.
If oldStatus.HasValue = True Then
If oldStatus.Value = ServiceStatus.UserEditing Then
'Get all copywriters
For Each p In copywriters
'Send email
Next
End If
End If
End If
Catch ex As Exception
End Try
End Sub
这有以下优点,
可以轻松更改内部逻辑。
整个流程在一个位置进行管理。
但是:
这是顺序的。在 for 循环中发送电子邮件将花费大量时间。但它太大了,无法在 asp.net 回发时间内完成。
我使用 SmtpClient 作为邮件工具。但是中间层不支持发送异步。
期待解决方案
有没有办法从 asp.net 异步发送电子邮件但不是页面(来自中间层)?
对于基于 Web 的解决方案,还有其他更好的工作流解决方案吗?
我不在 C# 或 vb.net 中回答。 我正在使用 .net 4.0
补充说明
我需要更新有关此状态的数据库。不仅仅是发送电子邮件。
【问题讨论】:
-
@user492238 感谢您的建议。它们都专门用于发送批量电子邮件。但我的问题不仅仅是发送电子邮件。增加页面超时工作正常。但这也增加了用户的等待时间。我正在寻找异步工作流程。
标签: .net asp.net .net-4.0 workflow