![](/img/trans.png)
[英]How to call self-signed gRPC service from Xamarin.Forms (iOS and Android)
[英]Xamarin.Forms gRPC Error starting gRPC call: unexpected end of stream on Connection
我为我的学习编写了一个应用程序。
我尝试在 Xamarin.Forms 中使用 gRPC。
gRPC 位于单独的 Libyry (.NET Standard 2.1) 中。 如果我使用 WPF-Core 项目中的代码,一切正常。
但是,如果我尝试在我的 Xamarin.Forms-Project 中使用相同的连接,则连接不起作用。
如果我使用 connectionString " http://my.server.com:5050 " 我得到这些异常
Error starting gRPC call: unexpected end of stream on Connection{my.server.com:5050, proxy=DIRECT hostAddress=5.189.149.82 cipherSuite=none protocol=http/1.1} (recycle count=0)
如果我使用 SSL 版本“ https://my.server.com:5050 ”,我会收到这些异常
Error starting gRPC call: Connection closed by peer
这是 gRPC-Libary 的代码
...
if (connectionString.Contains("http://"))
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
channel = GrpcChannel.ForAddress(connectionString);
client = new Haushaltsbuch.HaushaltsbuchClient(channel);
SuccsessReply reply = new SuccsessReply { Result = false };
try
{
reply = client.Login(new UserRequest
{
User = new GRPC_User
{
Username = username,
PassHash = passHash
}
});
}
catch (RpcException e) when (e.Status.Detail.Contains("The SSL connection could not be established"))
{
client = null;
throw new CommunicationException("Fehler mit SSL-Zertifikat des Servers", e);
}
catch (RpcException e)
{
client = null;
throw new CommunicationException("Server nicht erreichbar", e);
}
...
我只是一个学生,如果我用谷歌搜索,它会说 Xamarin Forms 支持 gRPC。 但为什么它不起作用?
.Android 项目安装了来自 NuGet 的 GRPC.Core 包。
通过替换解决它
channel = GrpcChannel.ForAddress(connectionString);
和
if (connectionString.Contains("http://"))
{
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
string newConString = connectionString.Replace("http://", "");
return new Channel(newConString, ChannelCredentials.Insecure);
}
else
{
string newConString = connectionString.Replace("https://", "");
return new Channel(newConString, new SslCredentials());
}
似乎 GrpcChannel 类不适用于 Andriod。
更新:2021 年 5 月
Xamarin 不完全支持 gRPC,因此在 Xamarin.Forms 上开发软件时请注意这一点。
从 gRPC 版本 2.34.X 开始,gRPC 已开始部分支持带有 Android 和 iOS 设备的 Xamarin.Forms。
请参阅此了解更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.