【问题标题】:How to use WebListenerCommunicationListener in Service Fabric ASP.NET Core 2如何在 Service Fabric ASP.NET Core 2 中使用 WebListenerCommunicationListener
【发布时间】:2018-01-23 21:14:33
【问题描述】:

我刚刚创建了我的第一个 ASP.NET Core 2 Stateless Service Fabric Reliable 服务,但我注意到的第一件事是,现在默认使用核心 1.X 中使用的 KestrelCommunicationListener 插入 WebListenerCommunicationListener。它似乎已从服务结构 aspnetcore 库中删除。

这不会让我在同一物理机或虚拟机上配置多个进程以在同一端口上托管 Web 应用程序,通过唯一的 URL 路径或主机名消除歧义。这些功能在 Service Fabric 中非常有用,可用于在同一集群中托管多个网站。

有人知道我是否遗漏了什么或有解决方法吗?

谢谢

【问题讨论】:

标签: c# azure azure-service-fabric asp.net-core-2.0


【解决方案1】:

根据 SDK 2.7.198 的发行说明,asp.net Core 2.0 尚不支持 Weblistener。

https://blogs.msdn.microsoft.com/azureservicefabric/2017/08/09/release-of-sdk-2-7-198-and-runtime-5-7-198-for-windows/

【讨论】:

    【解决方案2】:

    PM 提供的答案

    “在 ASP.NET Core 2.0 中,Microsoft.AspNetCore.Server.WebListener 包已与 Microsoft.Net.Http.Server 合并到一个名为 Microsoft.AspNetCore.Server.HttpSys 的新包中 (aspnet/Announcements#211)。 Service Fabric 还没有用于此的集成包,因此如果您使用 WebListener,您需要暂时保持在 1.xx 版本。对新的 Microsoft.AspNetCore.Server.HttpSys 包的支持将在下一个 SDK 功能版本 (Azure/service-fabric-aspnetcore#15)。”

    【讨论】:

      【解决方案3】:

      根据 2017 年 9 月 25 日https://msdnshared.blob.core.windows.net/media/2017/10/Microsoft-Azure-Service-Fabric-Release-Notes-SDK-2.8.0-Runtime-6.0.0.pdf 发布的 SDK 版本 2.8.0 的发行说明,现已推出。

      根据发行说明:

      在 ASP.NET Core 2.0 中,WebListener 服务器被重新打包并重命名 到 HttpSys。用于 HttpSys 的 Service Fabric 集成包 服务器现在可用:Microsoft.ServiceFabric.AspNetCore.HttpSys。 这个包包含一个重命名的 ICommunicationListener 实现 对于 HttpSys:HttpSysCommunicationListener。

      如果您当前正在使用 WebListener 并想升级到 ASP.NET Core 2.0,使用 Microsoft.ServiceFabric.AspNetCore.HttpSys 包 而不是 Microsoft.ServiceFabric.AspNetCore.WebListener 包。

      protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() {
        return new ServiceInstanceListener[] 
        {
          new ServiceInstanceListener(serviceContext => 
            new HttpSysCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) => 
              new WebHostBuilder()
                .UseHttpSys()
                .ConfigureService(
                  service => services
                    .AddSingleton<StatelessServiceContext>(serviceContext))
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                .UseStartup<Startup>()
                .UseUrls(url)
                .Build()))
        };
      }
      

      【讨论】:

        【解决方案4】:

        根据更新的文档,见ASP.NET Core in Service Fabric Reliable Services

        HttpSys 建立在 Windows HTTP Server API 之上。这使用 IIS 使用的 http.sys 内核驱动程序来处理 HTTP 请求并将它们路由到运行 Web 应用程序的进程。 这允许同一物理机或虚拟机上的多个进程在同一端口上托管 Web 应用程序,通过唯一的 URL 路径或主机名消除歧义。这些功能在 Service Fabric 中用于托管多个网站同一个集群。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-15
          • 2023-04-06
          • 2017-02-27
          • 1970-01-01
          • 2018-02-22
          • 2017-10-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多