我正在努力转换我的一些 WCF 项目。是否可以将 gRPC 连接到 Windows Server 2019?我在 GitHub 存储库上读到它适用于 2022 年以上;然而这个问题是几年前提出的。
首先,我使用了 Visual Studio 中 gRPC 服务项目附带的默认项目(Greeter)。
————-
Web service settings
————-
using Server;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
var app = builder.Build();
app.MapGrpcService<GreeterService>();
app.Run();
// kestrel settings in appsettings set to Http1AndHttp2
————-
Proto
—————
syntax = "proto3";
package greet;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply);
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
——————-
service
——————-
using System.Threading.Tasks;
using Greet;
using Grpc.Core;
using Microsoft.Extensions.Logging;
namespace Server
{
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger _logger;
public GreeterService(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<GreeterService>();
}
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
_logger.LogInformation($"Sending hello to {request.Name}");
return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
}
}
}
我在本地和远程计算机上创建了网站,并尝试使用 Postman 进行测试。在本地它工作正常并且我得到响应。我在本地和远程都设置了 https,并且认证看起来不错。
但是在远程计算机(Windows Server 2019)上运行 Postman;我收到“13 内部”错误。
我已经检查了 IIS 的两个设置并确保 ASPNET 版本匹配,但没有那么幸运。
邮递员:
本地机器:
远程:
就像我说的,我可以在浏览器上访问 https://localhost/WSGreeter 进行本地和远程访问,两者都可以正常工作;没问题。
我的想法是它仍然与 Windows Server 2019 有关。
想知道是否有人找到了使其适用于此版本的 Windows Server 的解决方案。如果是这样;你能提供一下你做了什么吗?
官方文档中提到 gRPC 支持 Windows 11 Build 22000 或更高版本、Windows Server 2022 Build 20348 或更高版本。
如果您对 revsre 代理感兴趣,您可以安装 ARR 和 url 重写并设置 revse 代理规则。
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://destination url/{R:1}" />
</rule>
</rules>
</rewrite>