gpt4 book ai didi

asp.net - 您可以在 IIS 中运行 asp.net core 3.0 gRPC CLIENT 吗? (可能在 Azure 上?)

转载 作者:行者123 更新时间:2023-12-03 05:38:17 25 4
gpt4 key购买 nike

我读过很多关于此的相互矛盾的信息,似乎人们并不是 100% 清楚什么是可能的,什么是不可能的。我确信由于 HTTP/2 限制,您无法在 IIS 中托管 gRPC 服务器应用程序。文档非常清楚。但是,我想使用 IIS 作为反向代理,内部使用 gRPC 进行通信。因此,客户端将位于 IIS 中,而不是服务器。我认为由于此时的通信(即后端)不是通过 IIS 进行的,因此不会有任何问题。然而,我总是看到不同的答案。

我创建了一个托管在 IIS Express 中的哑 Web 应用程序,可以使用 gRPC 成功发布到在 Kestrel 上运行的服务。

下面的客户端代码示例。 SubmitButton 只是 razor 页面上的一个表单帖子。

        public async void OnPostSubmitButton()
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

}

服务器代码是 gRPC 的样板模板,但看起来像这样:

namespace grpcGreeter
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

// 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
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}


namespace grpcGreeter
{
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}

public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
}

这有效。但是,因为我不断看到混合信息说它不会,所以我不确定一旦我去部署客户端代码(即反向代理),是否会遇到问题。我想使用像 Azure 这样的主机...但不知道是否可行。

任何有关该主题的清晰度将不胜感激。

最佳答案

据我所知,我们可以使用asp.net core mvc或razor页面应用程序作为客户端来调用grpc服务器。

但是当您在远程服务器 IIS 上托管应用程序时,gRPC 客户端要求服务具有受信任的证书。

如果您没有安装证书的权限,则应使用 HttpClientHandler.ServerCertificateCustomValidationCallback 来允许没有受信任证书的调用。

注意:这将使调用不安全。

需要额外配置才能使用 .NET Core 客户端调用不安全的 gRPC 服务。 gRPC 客户端必须将 System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport 开关设置为 true 并在服务器地址中使用 http。

代码如下:

    AppContext.SetSwitch(
"System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
var httpClientHandler = new HttpClientHandler();
// Return `true` to allow certificates that are untrusted/invalid
httpClientHandler.ServerCertificateCustomValidationCallback =
HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
var httpClient = new HttpClient(httpClientHandler);
var channel = GrpcChannel.ForAddress("https://localhost:5001",
new GrpcChannelOptions { HttpClient = httpClient });
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = "World" });

关于asp.net - 您可以在 IIS 中运行 asp.net core 3.0 gRPC CLIENT 吗? (可能在 Azure 上?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60715174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com