Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Service 服务结构本地群集ASP.NET核心https端点_Service_Asp.net Core_Azure Service Fabric - Fatal编程技术网

Service 服务结构本地群集ASP.NET核心https端点

Service 服务结构本地群集ASP.NET核心https端点,service,asp.net-core,azure-service-fabric,Service,Asp.net Core,Azure Service Fabric,我在Azure VM、Windows 2016上运行VS2017,从当前SDK(4/29/17)开始使用本地服务结构,单节点。在深入研究之前,尝试简单地创建一个环境验证应用程序。使用VS工具创建ASP.NET核心web应用程序。它可以直接构建、部署和运行。此多个端点的示例失败: 我所能找到的只是代码片段;没有在本地集群上工作的内容。 有人能告诉我一个工作示例,它是本地集群上的一个ASP.NET核心web应用程序,具有http和https端点。谢谢 在一个使用SF5.5和SDK2.5的ASP.NE

我在Azure VM、Windows 2016上运行VS2017,从当前SDK(4/29/17)开始使用本地服务结构,单节点。在深入研究之前,尝试简单地创建一个环境验证应用程序。使用VS工具创建ASP.NET核心web应用程序。它可以直接构建、部署和运行。此多个端点的示例失败: 我所能找到的只是代码片段;没有在本地集群上工作的内容。
有人能告诉我一个工作示例,它是本地集群上的一个ASP.NET核心web应用程序,具有http和https端点。谢谢

在一个使用SF5.5和SDK2.5的ASP.NET核心项目(2017年3月)中,尝试简要介绍如何让http和https在本地计算机上同时工作。我显示代码和配置,并列出所有页面作为信息来源的参考。我不可能一个人做这件事。感谢社区
第1步:
创建本地SF群集要使用的证书。我喜欢这样创建证书。然后,我使用certmgr提取证书指纹以获取证书详细信息。
提示:当您从证书存储中复制指纹时,它将不起作用,我将其复制到记事本和Visual Studio代码中,然后将其粘贴到配置中。TChaing引用表示存在隐藏字符。我只是简单地输入(没有空格)。我知道证书有问题,因为事件查看器有错误消息,无法解析证书,这导致我得到了这个答案。
第二步:
对于我的应用程序和服务清单,Matt Kotsenas的文章非常棒。他还提供了一个创建侦听器的优雅解决方案,只需稍加调整即可使用我在代码清单中列出的ASP.Net内核。
代码:
ApplicationManifest文件
  <ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<!-- Add policies for service endpoints    -->
<Policies>
  <EndpointBindingPolicy EndpointRef="ServiceEndpointHttps" CertificateRef="MyCert" />
</Policies>


服务清单文件
  <ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<!-- Add policies for service endpoints    -->
<Policies>
  <EndpointBindingPolicy EndpointRef="ServiceEndpointHttps" CertificateRef="MyCert" />
</Policies>


在本例中,C#代码来自我的服务类“Web1”。有两种不同的方法来创建如下所示的侦听器。注释代码直接命名侦听器,如“ServiceEndpoint”和“HttpListner1”。这是ASP.NET核心中的新功能。如果有多个端点,则必须对其进行专门命名。如果未提供名称,ServiceEndpoint不会自动成为名称。
未注释的代码使用提取来获取服务名称,然后创建listners。在本例中,我使用“endpoint”变量还根据需要为侦听器添加显式名称

        protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        //return new ServiceInstanceListener[]
        //{
        // new ServiceInstanceListener(serviceContext =>
        //  new WebListenerCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
        //  {
        //   ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting WebListener on {url}");

        //   return new WebHostBuilder().UseWebListener()
        //    .ConfigureServices(
        //     services => services
        //      .AddSingleton<StatelessServiceContext>(serviceContext))
        //    .UseContentRoot(Directory.GetCurrentDirectory())
        //    .UseStartup<Startup>()
        //    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
        //    .UseUrls(url)
        //    .Build();
        //  }), "HttpListner1"),

        // new ServiceInstanceListener(serviceContext =>
        //  new WebListenerCommunicationListener(serviceContext, "ServiceEndpointHttps", (url, listener) =>
        //  {
        //   ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting WebListener on {url}");

        //   return new WebHostBuilder().UseWebListener()
        //    .ConfigureServices(
        //     services => services
        //      .AddSingleton<StatelessServiceContext>(serviceContext))
        //    .UseContentRoot(Directory.GetCurrentDirectory())
        //    .UseStartup<Startup>()
        //    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
        //    .UseUrls(url)
        //    .Build();
        //  }), "HttpsListner1")
        //};

        var endpoints = Context.CodePackageActivationContext.GetEndpoints()
         .Where(endpoint => endpoint.Protocol == EndpointProtocol.Http || endpoint.Protocol == EndpointProtocol.Https)
         .Select(endpoint => endpoint.Name);

        var eps = endpoints.Select(endpoint =>
         new ServiceInstanceListener(serviceContext =>
          new WebListenerCommunicationListener(serviceContext, endpoint, (url, listener) =>
           {
               ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting WebListener on {url}");

               return new WebHostBuilder().UseWebListener()
                      .ConfigureServices(
                          services => services
                              .AddSingleton<StatelessServiceContext>(serviceContext))
                      .UseContentRoot(Directory.GetCurrentDirectory())
                      .UseStartup<Startup>()
                      .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                      .UseUrls(url)
                      .Build();
           }
          ), endpoint));
        return eps;
    }
受保护的重写IEnumerable CreateServiceInstanceListeners()
{
//返回新服务InstanceListener[]
//{
//新ServiceInstanceListener(serviceContext=>
//新的WebListenerCommunicationListener(serviceContext,“ServiceEndpoint”,(url,listener)=>
//  {
//ServiceEventSource.Current.ServiceMessage(serviceContext,$“在{url}上启动WebListener”);
//返回新的WebHostBuilder().UseWebListener()
//.配置服务(
//服务=>服务
//.AddSingleton(serviceContext))
//.UseContentRoot(目录.GetCurrentDirectory())
//.UseStartup()
//.UseServiceFabricIntegration(侦听器,ServiceFabricIntegrationOptions.None)
//.useURL(url)
//.Build();
//}),“HttpListner1”),
//新ServiceInstanceListener(serviceContext=>
//新的WebListenerCommunicationListener(serviceContext,“ServiceEndpointHttps”,(url,侦听器)=>
//  {
//ServiceEventSource.Current.ServiceMessage(serviceContext,$“在{url}上启动WebListener”);
//返回新的WebHostBuilder().UseWebListener()
//.配置服务(
//服务=>服务
//.AddSingleton(serviceContext))
//.UseContentRoot(目录.GetCurrentDirectory())
//.UseStartup()
//.UseServiceFabricIntegration(侦听器,ServiceFabricIntegrationOptions.None)
//.useURL(url)
//.Build();
//}),“HttpsListner1”)
//};
var endpoints=Context.CodePackageActivationContext.GetEndpoints()
.Where(endpoint=>endpoint.Protocol==EndpointProtocol.Http | | endpoint.Protocol==EndpointProtocol.Https)
.Select(endpoint=>endpoint.Name);
var eps=端点。选择(端点=>
新ServiceInstanceListener(serviceContext=>
新的WebListenerCommunicationListener(serviceContext,endpoint,(url,listener)=>
{
ServiceEventSource.Current.ServiceMessage(serviceContext,$“在{url}上启动WebListener”);
返回新的WebHostBuilder().UseWebListener()
.配置服务(
服务=>服务
.AddSingleton(serviceContext))
.UseContentRoot(目录.GetCurrentDirectory())
.UseStartup()
.UseServiceFabricIntegration(侦听器,ServiceFabricIntegrationOptions.None)
.useURL(url)
.Build();
}
)终点);
返回每股收益;
}

我希望这能为您带来所有缺失的部分。

在一个ASP.NET核心项目中,通过SF5.5和SDK2.5(2017年3月),简要介绍如何让http和https在本地机器上同时工作。我显示代码和配置,并列出所有页面作为信息来源的参考。我不可能一个人做这件事。感谢社区
第1步:
创建本地SF群集要使用的证书。我喜欢这样创建证书。然后,我使用certmgr提取证书指纹以获取证书详细信息。
提示:当您从证书存储中复制指纹时,它将不起作用,我将复制
        protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        //return new ServiceInstanceListener[]
        //{
        // new ServiceInstanceListener(serviceContext =>
        //  new WebListenerCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
        //  {
        //   ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting WebListener on {url}");

        //   return new WebHostBuilder().UseWebListener()
        //    .ConfigureServices(
        //     services => services
        //      .AddSingleton<StatelessServiceContext>(serviceContext))
        //    .UseContentRoot(Directory.GetCurrentDirectory())
        //    .UseStartup<Startup>()
        //    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
        //    .UseUrls(url)
        //    .Build();
        //  }), "HttpListner1"),

        // new ServiceInstanceListener(serviceContext =>
        //  new WebListenerCommunicationListener(serviceContext, "ServiceEndpointHttps", (url, listener) =>
        //  {
        //   ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting WebListener on {url}");

        //   return new WebHostBuilder().UseWebListener()
        //    .ConfigureServices(
        //     services => services
        //      .AddSingleton<StatelessServiceContext>(serviceContext))
        //    .UseContentRoot(Directory.GetCurrentDirectory())
        //    .UseStartup<Startup>()
        //    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
        //    .UseUrls(url)
        //    .Build();
        //  }), "HttpsListner1")
        //};

        var endpoints = Context.CodePackageActivationContext.GetEndpoints()
         .Where(endpoint => endpoint.Protocol == EndpointProtocol.Http || endpoint.Protocol == EndpointProtocol.Https)
         .Select(endpoint => endpoint.Name);

        var eps = endpoints.Select(endpoint =>
         new ServiceInstanceListener(serviceContext =>
          new WebListenerCommunicationListener(serviceContext, endpoint, (url, listener) =>
           {
               ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting WebListener on {url}");

               return new WebHostBuilder().UseWebListener()
                      .ConfigureServices(
                          services => services
                              .AddSingleton<StatelessServiceContext>(serviceContext))
                      .UseContentRoot(Directory.GetCurrentDirectory())
                      .UseStartup<Startup>()
                      .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                      .UseUrls(url)
                      .Build();
           }
          ), endpoint));
        return eps;
    }