【发布时间】:2022-08-11 17:36:56
【问题描述】:
我正在尝试更改 ASP.NET Core 6 Grpc 应用程序中的 HTTPS 端口,但只要未设置特定端口(在我的情况下为 7113),应用程序总是显示错误。我计划将应用程序 dockerize 并且需要动态设置 IP。这是我的 Program.cs 文件,
global using dtms_service_master.Models.Context;
using dtms_service_master.Controllers;
using dtms_service_master.Models;
using dtms_service_master.Repositories;
using dtms_service_master.Services;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.ListenAnyIP(80, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1;
});
serverOptions.ListenAnyIP(7113, listenOptions => // in my case this needs always to be 7113 :(
{
listenOptions.Protocols = HttpProtocols.Http2;
listenOptions.UseHttps();
});
});
var Configuration = builder.Configuration;
// Additional configuration is required to successfully run gRPC on macOS.
// For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682
// Add services to the container.
builder.Services.AddGrpc();
builder.Services.AddGrpcHttpApi();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc(\"v1\", new OpenApiInfo { Title = \"My API\", Version = \"v1\" });
});
builder.Services.AddGrpcSwagger();
builder.Services.AddGrpcReflection();
builder.Services.AddCors(o =>
o.AddDefaultPolicy(builder =>
{
builder.WithOrigins(\"*\")
.AllowAnyMethod()
.AllowAnyHeader()
.WithExposedHeaders(
\"Grpc-Status\",
\"Grpc-Message\",
\"Grpc-Encoding\",
\"Grpc-Accept-Encoding\");
}));
builder.Services.AddDbContextFactory<ServiceMasterContext>(
options => options.UseNpgsql(Configuration.GetConnectionString(\"DefaultConnection\")));
builder.Services.AddRepository();
builder.Services.AddServices();
builder.Services.AddAutoMapper(typeof(Mapper));
builder.Services.Configure<KestrelServerOptions>(options => options.AllowSynchronousIO = true);
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint(\"/swagger/v1/swagger.json\", \"gRPC HTTP API Example V1\");
});
app.UseRouting();
app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true });
app.UseCors();
if (app.Environment.IsDevelopment())
app.MapGrpcReflectionService();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
endpoints.MapGrpcService<DummyController>();
endpoints.MapGrpcService<VendorController>();
});
app.MapGet(\"/\", () => \"Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909\");
app.Run();
这是我之前提到的错误,
Grpc.Core.RpcException: Status(StatusCode=\"Unavailable\", Detail=\"Error starting gRPC call. HttpRequestException: No connection could be made because the target machine actively refused it. (localhost:7113) SocketException: No connection could be made because the target machine actively refused it.\", DebugException=\"System.Net.Http.HttpRequestException: No connection could be made because the target machine actively refused it. (localhost:7113)
---> System.Net.Sockets.SocketException (10061): No connection could be made because the target machine actively refused it.
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
at System.Net.Sockets.Socket.<ConnectAsync>g__WaitForConnectWithCancellation|283_0(AwaitableSocketAsyncEventArgs saea, ValueTask connectTask, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.DefaultConnectAsync(SocketsHttpConnectionContext context, CancellationToken cancellationToken)
at System.Net.Http.ConnectHelper.ConnectAsync(Func`3 callback, DnsEndPoint endPoint, HttpRequestMessage requestMessage, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.ConnectAsync(Func`3 callback, DnsEndPoint endPoint, HttpRequestMessage requestMessage, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.GetHttp2ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at Grpc.Net.Client.Internal.GrpcCall`2.RunCall(HttpRequestMessage request, Nullable`1 timeout)\")
at Grpc.Net.Client.Internal.HttpContentClientStreamWriter`2.WriteAsyncCore[TState](Func`5 writeFunc, TState state)
at Kreya.Grpc.Core.Importer.ServerReflection.GrpcServerReflectionImporter.ReadAllServices(AsyncDuplexStreamingCall`2 call)
at Kreya.Grpc.Core.Importer.ServerReflection.GrpcServerReflectionImporter.ImportViaServerReflection(GrpcServerReflectionImporterOptions options)
知道如何正确更改 HTTPS 端口吗?
-
您需要使用服务器正在使用的相同端口号。如果您使用错误的端口号,服务器将不会响应。端口号可以是用户输入,但服务器必须监听用户输入的端口号。
-
你什么时候在启动或调用任何 API 时出错?检查这个。 stackoverflow.com/a/70817994/9247039
-
该端口也可以被防火墙阻止。
-
您更改了服务器上的端口,但您是否在客户端上设置了相同的端口?
标签: c# asp.net-core grpc