如何像 WCF 一样实现 Asp.net MVC One Way/Fire And Forget 调用?
Posted
技术标签:
【中文标题】如何像 WCF 一样实现 Asp.net MVC One Way/Fire And Forget 调用?【英文标题】:How to achieve Asp.net MVC OneWay/FireAndForget call like WCF does? 【发布时间】:2012-06-22 17:29:34 【问题描述】:在 WCF 中你有这样的东西
[ServiceContract]
public interface IDoAuditService
[OperationContract(IsOneWay = true)]
[WebInvoke]
void Audit(AuditEntry auditEntry);
这将允许消费者发出请求并继续流程而无需等待响应。
我已经尝试使用带有 AsyncController 的 Asp.net MVC,但使用者仍会阻塞并等待,直到在控制器中调用回调。
我想要的是使用 Asp.Net MVC,但 WCF 的行为就像,我想发出请求并继续流程而不等待处理请求
【问题讨论】:
使用 c# .net 框架踏步。这应该适用于您的服务器端。 【参考方案1】:如何在服务器上执行异步操作主体并立即返回给调用者。这不完全是一场火灾,然后忘记,但它会效仿。
public ActionResult MyAction()
var workingThread = new Thread(OperationToCallAsync);
workingThread.Start();
return View();
void OperationToCallAsync()
...
【讨论】:
可能这可能是一个解决方案,我假设我想要的是常见场景并且是本机实现的,但我不知道。 我不知道本机支持这个。 这也是我的想法,但是当 MyAction() 超出范围时,workingThread 会发生什么? 在示例中,workingThread 是一个前台线程,因此该线程将按照您的预期完成。但是,如果这是一个后台线程并且进程中所有剩余的前台线程都已完成,那么该线程将停止执行 b/c 进程将退出。但是,在 Web 应用程序中,托管进程在被回收或强制终止之前不会退出。以上是关于如何像 WCF 一样实现 Asp.net MVC One Way/Fire And Forget 调用?的主要内容,如果未能解决你的问题,请参考以下文章
asp.net mvc 中怎么像webform一样自定义一个BaseController实现判断用户是不是登录 然后获取用户的权限