Visual Studio 2015 Update 2提供了一个模板,用于在服务结构中创建基于owin的控制器。创建的结构向您显示无状态可靠服务,并将基于owin的控制器显示为2个不同的C#类。这有效。在这种情况下,可靠的服务类只是注册一个http监听器,所有的调用都将路由到控制器类。在某种程度上,无状态可靠服务一旦创建就不在其中,只有在服务启动时才有用。
我期待看到可靠的服务和基于owin的控制器,同时也是如此。目前的结构似乎是一个补丁工作。
如果我要将无状态可靠服务更改为有状态可靠服务,我无法对状态服务做任何事情,因为我的请求被路由到控制器。如果我要在我的控制器中与状态管理器进行交互,那么我必须获得有状态服务的引用,然后执行我的操作。感觉很尴尬。
有更清洁的方法吗?
答案 0 :(得分:1)
该服务是您的应用程序容器。服务基类(StatefulService和StatelessService)是您的应用程序的入口点。您可以直接在这些类中派对,并将所有代码都放在那里,或者您可以使用该入口点来引导其他应用程序框架,如ASP.NET MVC或Reliable Actors等等。 Service Fabric通过服务基类提供所有平台依赖关系(例如,ServiceContext,IReliableStateManager用于有状态服务等),如果你的代码在哪里,你可以直接在这些类中使用它们,或者你可以将这些依赖项传递给其他一些应用程序框架。
对于ASP.NET,我们使用该服务来引导基于OWIN的Web服务器(Katana,Kestrel,WebListener),然后我们提供应用程序中间件(MVC,StaticFiles等)。然后,您可以使用您喜欢的依赖注入框架(Unity,Autofac,Ninject或ASP.NET Core的内置依赖注入框架)将所有平台依赖项传递给中间件。
以下是使用Unity和Katana执行此操作的有状态服务的示例:https://github.com/Azure-Samples/service-fabric-dotnet-getting-started/tree/master/Services/WordCount/WordCount.Service