在Service Fabric上托管webapi

本文关键字:webapi Service Fabric | 更新日期: 2023-09-27 18:17:32

我们刚刚建立了一个内部部署的MS Service Fabric集群。我有一些WebAPI的我想在它的主机。我正在寻找有关如何采用我们的标准4.5 WebAPI并将它们托管在Service Fabric中的资源,而无需创建Service Fabric项目并迁移它;这似乎太复杂了。

我查看了一些Service Fabric示例项目,似乎所有的项目都与Service Fabric紧密耦合。我的目标是让这些应用不知道Service Fabric。

任何链接的信息是非常感激,谢谢!

在Service Fabric上托管webapi

我们是这样做的:

  • 在WebAPI的相同解决方案中创建服务结构项目。
  • 在ServiceFabricHost项目中,我们创建了HttpListenerService来使用服务结构公开端口,就像你对SelfHosted WebApi所做的一样。
  • 配置ServiceFabricHost以打开所需的端点
  • 添加对WebApi项目的引用
  • 使用WebApi Startup发送IAppBuilder并使用我们的外部(SF)配置配置api,如端口和URL。
秘诀是:当你创建一个自托管的web api时,你通常会创建一个控制台应用程序,就像asp.net文档一样。使用服务结构,您可以用ServiceFabricService替换控制台,它类似于ConsoleApplication,但在本例中将是一个无状态服务。

在这种情况下,我们为HttpListenerService使用了无状态服务,如果你需要一个StateFull服务,你将需要重构你的Api来使用可靠的集合。

Vaclac,创建了一个很好的教程:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-services-communication-webapi/

如果它是一个带有自托管web服务器的独立web应用程序(例如,Katana,而不是IIS),那么你可以简单地将其作为客户可执行文件运行。

如果它不是自托管的,需要一个单独的web服务器来运行,比如IIS,那么你可以考虑在一个容器中运行它。

我有同样的问题,并通过在Startup()类中使用HttpConfiguration对象上的DependencyResolver.GetService()方法来解决它。创建一个新的服务结构无状态/有状态WebAPI项目。在Startup()类中,添加以下代码:

 public static class Startup
{
    // This code configures Web API. The Startup class is specified as a type
    // parameter in the WebApp.Start method.
    public static void ConfigureApp(IAppBuilder appBuilder)
    {
        // Configure Web API for self-host.
        HttpConfiguration config = new HttpConfiguration();
        // Allow custom routes in controller attributes.
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "Default",
            routeTemplate: "{controller}/{action}/{id}",
            defaults: new { controller = "API", action = "HealthCheck", id = RouteParameter.Optional }
        );
        //inject controllers here
        config.DependencyResolver.GetService(typeof({{YourWebAPIRootNamespace}}.Controllers.APIController));
        appBuilder.UseWebApi(config);
    }
}

这允许您将现有api部署到Service Fabric中,而无需将整个代码库迁移到新项目中。不要忘记在新项目中使用web.config中的所有适用设置来更新app.config。

完整博客文章在这里http://thenameisirrelevant.com/hosting-an-existing-webapi-in-service-fabric