如何像 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 应用程序的 WCF 服务

RESTful 服务:WCF 与 ASP.NET MVC

ASP.NET MVC API 或 WCF API

asp.net mvc 中怎么像webform一样自定义一个BaseController实现判断用户是不是登录 然后获取用户的权限

如何在 ASP.Net MVC 应用程序中使用来自 WCF 身份验证服务的身份验证 cookie

ASP.NET MVC 和 WCF