【发布时间】:2022-12-22 05:52:10
【问题描述】:
我正在尝试使用 CoreWCF 包将旧的 WCF 服务转换为 ASP.NET Core Web API。这个现有服务的一个关键特性是它由其他应用程序自行托管,并且能够通过用户在 WPF UI 上完成的按钮按下来优雅地启动和停止。
应该通过 HTTPS 端点访问此服务,这就是我苦苦挣扎的地方。我已经能够使用常规 HTTP 成功访问 API,但我猜我遗漏了什么或者它与我的证书有关。我已经尝试通过传递 listeningOption.UseHTTPS() 使用默认证书,但是当我转到 URL 时,它会返回错误 500。我还尝试了一个自签名证书并将其传递到上述方法中,但是它不断返回相同的错误。
配置一切的代码如下所示:
配置虚拟主机:
private void CreateWebHostBuilder(){
host = WebHost.CreateDefaultBuilder()
.UseKestrel(options =>
{
options.AllowSynchronousIO = true;
options.ListenLocalhost(Startup.PORT_NR,
lOptions => lOptions.UseHttps("{absolute path}", "{password}"));
);
})
.ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); })
.UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
.UseShutdownTimeout(TimeSpan.FromSeconds(1))
.UseStartup<Startup>()
.Build();
}
在Startup 类中:
配置IApplicationBuilder:
public void Configure(IApplicationBuilder app){
app.UseServiceModel(builder =>
{
// Add the Echo Service
builder.AddService<EchoService>()
// Add service web endpoint
.AddServiceWebEndpoint<EchoService, IEchoService>(
WEB_API_PATH,behavior => { behavior.HelpEnabled = true;}
);
});
app.UseMiddleware<SwaggerMiddleware>();
app.UseSwaggerUI();
app.UseAuthentication();
app.UseHttpsRedirection();
}
配置服务:
public void ConfigureServices(IServiceCollection services){
services.AddServiceModelWebServices()
.AddHostedService<EchoService>()
.AddSingleton(new SwaggerOptions())
.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)
.AddCertificate();
services.AddHttpsRedirection(options =>
{
options.HttpsPort = HTTPS_PORT_NR;
});
}
由于这是作为 WPF 应用程序开始的,所以我没有要添加的 appsettings.json 文件,如果需要的话,我真的不知道要在其中添加什么。
因此,如果有人有任何建议或教程参考,请务必告诉我,欢迎任何帮助。
【问题讨论】:
标签: asp.net-core https asp.net-core-webapi kestrel-http-server