我在 ASP.NET 中创建了一个带有 RESTful API 的服务,托管在 IIS 中。在这个服务中,我想用 Akka.NET 创建一个演员系统。
创建演员系统后:
var actorSystem = ActorSystem.Create("myActorSystem");
抛出以下异常:
System.Web.dll 中出现“System.InvalidOperationException”类型的第一次机会异常附加信息:此时无法启动异步操作。异步操作只能在异步处理程序或模块内或在页面生命周期中的某些事件期间启动。如果在执行页面时发生此异常,请确保将页面标记为 <%@ Page Async="true" %>。此异常还可能表示尝试调用“async void”方法,在 ASP.NET 请求处理中通常不支持该方法。相反,异步方法应该返回一个任务,调用者应该等待它。
Actor 系统本质上是一个并发系统,在 Actor 之间交换异步消息。正如这里所解释的,这个actor系统将无法在 IIS 关闭 AppDomain 后继续存在,这可能就是引发上述异常的原因。
本文介绍了如何在 ASP.NET 中运行后台任务。但是,我不知道如何将它用于我的演员系统,因为我无法控制可能由 Akka.NET 创建的后台任务的生命周期。
有没有办法使这项工作,或者我应该放弃在 ASP.NET 应用程序中拥有演员系统的想法?
编辑:我还在 Stackoverflow 上看到了一个关于使用 Akka 实现 REST 服务的问题。欢迎任何关于类似于Spray 工具包但适用于 Akka.NET 的解决方案的建议。