C# 我的gRPC测试项目只在本地主机上工作
我有以下问题 我创建了一个gRpc服务器(控制台应用程序.Net 4.7.2-由于Crystal Reports:()和一个客户端(WPF应用程序.Net Core 3.1),只要服务器和客户端在我的机器上(Windows 10),我就可以运行它。至于我将服务器转移到另一台机器(Windows Server 2016),它就不再工作了 这是RPC异常: 状态(StatusCode=“不可用”,Detail=“无法连接到所有 地址“, DebugException=“Grpc.Core.Internal.CoreErrorDetailException: {“已创建”:“@1595508082.170000000”,“说明”:“拾取失败” 子通道,“文件”:“T:\src\github\grpc\workspace\u csharp\u ext\u windows\u x64\src\core\ext\filters\client\u channel\client\u channel.cc”,“文件行”:3948,“引用的错误”:[{“已创建”:“@1595508082.170000000”,“说明”:“失败” 连接到所有 地址,“文件”:“T:\src\github\grpc\workspace\u csharp\u ext\u windows\u x64\src\core\ext\filters\client\u channel\lb\u policy\pick\u first\pick\u first.cc”,“文件行”:394,“grpc\u状态:14}”) 我尝试了所有变体。以下是我在localhost上运行的最新代码: 服务器:C# 我的gRPC测试项目只在本地主机上工作,c#,.net,grpc,C#,.net,Grpc,我有以下问题 我创建了一个gRpc服务器(控制台应用程序.Net 4.7.2-由于Crystal Reports:()和一个客户端(WPF应用程序.Net Core 3.1),只要服务器和客户端在我的机器上(Windows 10),我就可以运行它。至于我将服务器转移到另一台机器(Windows Server 2016),它就不再工作了 这是RPC异常: 状态(StatusCode=“不可用”,Detail=“无法连接到所有 地址“, DebugException=“Grpc.Core.Inter
static void Main(string[] args)
{
var cacert = File.ReadAllText(@"root.crt");
var servercert = File.ReadAllText(@"server.crt");
var serverkey = File.ReadAllText(@"server.key");
var keypair = new KeyCertificatePair(servercert, serverkey);
var sslCredentials = new SslServerCredentials(new List<KeyCertificatePair>() { keypair }, cacert, false);
// Build a server
var server = new Server
{
Services = { ReportService.BindService(new KKarteReportService()) },
Ports = { new ServerPort(Host, Port, sslCredentials) }
};
// Start server
server.Start();
Console.WriteLine("KKarteReport Server listening on port " + Port);
Console.WriteLine("Press any key to stop the server...");
Console.ReadKey();
server.ShutdownAsync().Wait();
}
static void Main(字符串[]args)
{
var cacert=File.ReadAllText(@“root.crt”);
var servercert=File.ReadAllText(@“server.crt”);
var serverkey=File.ReadAllText(@“server.key”);
var keypair=newkeycertificatePair(servercert,serverkey);
var sslCredentials=新的SslServerCredentials(新列表(){keypair},cacert,false);
//构建服务器
var server=新服务器
{
Services={ReportService.BindService(新的kkarteportservice())},
端口={new ServerPort(主机、端口、sslCredentials)}
};
//启动服务器
server.Start();
Console.WriteLine(“KKarteReport服务器侦听端口”+端口);
Console.WriteLine(“按任意键停止服务器…”);
Console.ReadKey();
server.shutdownsync().Wait();
}
客户
var cacert = File.ReadAllText(@"root.crt");
var clientcert = File.ReadAllText(@"client.crt");
var clientkey = File.ReadAllText(@"client.key");
var ssl = new SslCredentials(cacert, new KeyCertificatePair(clientcert, clientkey));
var options = new List<ChannelOption> { new ChannelOption(ChannelOptions.SslTargetNameOverride, "MyServerHost") };
var channel = new Channel("12.20.18.11", 5001, ssl, options);
//var channel = new Channel("localhost", 5001, ssl, options);
//var channel = new Channel(url, ChannelCredentials.Insecure);
var client = new ReportService.ReportServiceClient(channel);
using var streamingCall = client.CreateAusschreibung(request);
await using var ms = new MemoryStream();
while (await streamingCall.ResponseStream.MoveNext())
{
ms.Write(streamingCall.ResponseStream.Current.FileChunk.ToByteArray());
}
var cacert=File.ReadAllText(@“root.crt”);
var clientcert=File.ReadAllText(@“client.crt”);
var clientkey=File.ReadAllText(@“client.key”);
var ssl=新的SslCredentials(cacert,新的密钥证书Pair(clientcert,clientkey));
var options=new List{new ChannelOption(ChannelOptions.SslTargetNameOverride,“myserver主机”)};
var通道=新通道(“12.20.18.11”,5001,ssl,选项);
//var通道=新通道(“本地主机”,5001,ssl,选项);
//var channel=新频道(url,ChannelCredentials.unsecure);
var client=new ReportService.ReportServiceClient(通道);
使用var streamingCall=client.CreateAusschreibung(请求);
使用var ms=new MemoryStream()等待;
while(等待streamingCall.ResponseStream.MoveNext())
{
ms.Write(streamingCall.ResponseStream.Current.FileChunk.ToByteArray());
}
我遗漏了什么?服务器端的“主机”变量包含什么?问题可能是地址绑定不正确,这会阻止从本地主机以外的IP地址访问服务(127.0.0.1)。请尝试在那里输入0.0.0.0。如果这看起来太明显,很抱歉,但由于我在过去遇到过类似的服务器/客户端问题,我认为可以这样问:您是否检查了两侧的防火墙配置?是的,检查了多次。如果我在这个端口上使用wcf服务或老式rpc调用,它会工作……Http2是防火墙的要求r HTTP2需要gRPC和Https。请尝试将上下文切换到
Http2UnencryptedSupport
,将Http2Support
切换到false。@MujahidDaudKhan您的意思是我需要在我的wpf客户端或服务器端执行此操作,还是同时在服务器端执行此操作?我对gRPC的内容非常陌生,必须将服务器设置为NET4.7.2和客户端wpf Core 3.1。您能设置吗具有以下要求的正在运行的testproject?:)@blindmeis仅在客户端上运行。出于测试目的,您可以使用