我有一个无状态服务充当api网关以及在安全服务结构集群(使用Azure AD)上部署到Azure的有状态服务。我暴露了一个websocket端点(wss)。从我的客户端应用程序(使用ClientWebSocket实例的控制台应用程序)连接时,我得到了#34;无法连接到远程服务器"内部异常说明:"身份验证失败,因为远程方已关闭传输流。"如果我附加了SSL证书(来自我的本地计算机),并且在我创建集群时使用ClientWebsocket对象传递了NetworkCredentials,则会发生这种情况。我点击的端点如下所示:wss://blahblahblah.cloudapp.azure.com:19000 / mygateway / data。当我在保护它之前在本地测试此代码时,我能够连接。成功部署到安全集群后,我的客户端应用程序无法连接。我需要从客户端提供其他东西才能通过安检吗?
public async Task<bool> ConnectAsync(Uri serviceAddress)
{
this._clientWebSocket = new ClientWebSocket();
using (CancellationTokenSource tcs = new CancellationTokenSource(TimeSpan.FromSeconds(5)))
{
try
{
_clientWebSocket.Options.ClientCertificates = GetCertForRemoteAuthentication();
_clientWebSocket.Options.Credentials = new NetworkCredential{Domain = "mydomain", Password = "somepassword", UserName = "username"};
await this._clientWebSocket.ConnectAsync(serviceAddress, tcs.Token);
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
return true;
}
答案 0 :(得分:1)
通过指定特定端口并将该端点命名为我们的有状态服务,而不是我们的服务结构应用程序端点(在端口19000上) - 我们能够完成我们的服务。还必须在服务器代码上添加一些代码,以确保我们将服务器证书绑定到服务器端的websocket侦听器。这解决了我们的问题。