使用 Ably.io 连接创建连接时出现未知错误
Get Unknown error when connecting creating a connection using Ably.io
我们有一个用例,其中用户尚未登录到应用程序并且尚未创建身份验证令牌。该应用程序需要通过 public 通道连接到 Web 服务器以检查应用程序更新。连接失败。出现以下错误原因:“未知错误;代码:500;HttpStatus 代码:(404)NotFound。
来自 Nuget 0.8.11 的 Ably 库和 SDK。
以下代码没有连接到网络服务器。
public ExtendedAblyIoClient(string name, string ClientId, string ChannelId, string AuthUrl, string ablyKey)
{
_name = name;
_authUrl = AuthUrl;
_clientId = ClientId;
_channelId = ChannelId;
_ablyAppKey = ablyKey;
_authUri = new Uri(_authUrl); // local host for testing and development.
_httpRequestTime = TimeSpan.FromHours(2.0);
ClientOptions clientOptions = new ClientOptions
{
Key = _ablyAppKey,
ClientId = _clientId,
AuthUrl = _authUri,
Tls = false,
HttpRequestTimeout = _httpRequestTime,
HttpOpenTimeout = _httpRequestTime
};
commonInitialization(clientOptions);
_channel = _ablyClient.Channels.Get(_channelId);
_channel.Subscribe(message =>
{
OnMessageCallback(_sender, _channelId, message.Data.ToString());
});
}
private void commonInitialization(ClientOptions clientOptions)
{
_ablyClient = new AblyRealtime(clientOptions);
_ablyClient.Connection.On(ConnectionState.Connected, args =>
{
realTimeClientOnConnected(_sender);
});
_ablyClient.Connection.On(ConnectionState.Disconnected, args =>
{
realTimeClientOnDisconnected(_sender);
});
_ablyClient.Connection.On(ConnectionState.Failed, args =>
{
string WhyError = _name + " Failed: " + _ablyClient.ToString();
realTimeClientOnDisconnected(WhyError);
});
}
404 将来自尝试联系您指定的 AuthUrl 并获得 404 的客户端库。
从您的问题来看,您似乎希望在连接到 'public channel' 时不必进行身份验证。这不是 Ably auth 的工作方式;连接到您的应用程序的任何用户都需要经过身份验证,并且有一个令牌或 api 密钥可以连接,这就是经过身份验证的意思。
如果您不希望他们连接到任何不在 public:
命名空间中的频道,并且只有这些频道的订阅功能,您可以将功能设置为 [=11] =].但是你还是需要给他们一个令牌。
通读 https://www.ably.io/documentation/general/authentication for documentation on Ably's auth model, and https://www.ably.io/documentation/realtime/authentication 以专门验证实时连接。
编辑:您指出您也传递了一个密钥。客户端不能同时使用两者——它要么与密钥连接,要么从 authUrl 获取令牌并与之连接——因此它可能只是忽略其中之一。删除您不想使用的那个。
编辑:我还建议删除禁用 Tls 和更改 http 超时的选项,并将它们保留为默认值。除非您出于某些特殊原因禁用 tls,否则出于安全原因,我们强烈建议将其保持启用状态。
我们有一个用例,其中用户尚未登录到应用程序并且尚未创建身份验证令牌。该应用程序需要通过 public 通道连接到 Web 服务器以检查应用程序更新。连接失败。出现以下错误原因:“未知错误;代码:500;HttpStatus 代码:(404)NotFound。
来自 Nuget 0.8.11 的 Ably 库和 SDK。
以下代码没有连接到网络服务器。
public ExtendedAblyIoClient(string name, string ClientId, string ChannelId, string AuthUrl, string ablyKey)
{
_name = name;
_authUrl = AuthUrl;
_clientId = ClientId;
_channelId = ChannelId;
_ablyAppKey = ablyKey;
_authUri = new Uri(_authUrl); // local host for testing and development.
_httpRequestTime = TimeSpan.FromHours(2.0);
ClientOptions clientOptions = new ClientOptions
{
Key = _ablyAppKey,
ClientId = _clientId,
AuthUrl = _authUri,
Tls = false,
HttpRequestTimeout = _httpRequestTime,
HttpOpenTimeout = _httpRequestTime
};
commonInitialization(clientOptions);
_channel = _ablyClient.Channels.Get(_channelId);
_channel.Subscribe(message =>
{
OnMessageCallback(_sender, _channelId, message.Data.ToString());
});
}
private void commonInitialization(ClientOptions clientOptions)
{
_ablyClient = new AblyRealtime(clientOptions);
_ablyClient.Connection.On(ConnectionState.Connected, args =>
{
realTimeClientOnConnected(_sender);
});
_ablyClient.Connection.On(ConnectionState.Disconnected, args =>
{
realTimeClientOnDisconnected(_sender);
});
_ablyClient.Connection.On(ConnectionState.Failed, args =>
{
string WhyError = _name + " Failed: " + _ablyClient.ToString();
realTimeClientOnDisconnected(WhyError);
});
}
404 将来自尝试联系您指定的 AuthUrl 并获得 404 的客户端库。
从您的问题来看,您似乎希望在连接到 'public channel' 时不必进行身份验证。这不是 Ably auth 的工作方式;连接到您的应用程序的任何用户都需要经过身份验证,并且有一个令牌或 api 密钥可以连接,这就是经过身份验证的意思。
如果您不希望他们连接到任何不在 public:
命名空间中的频道,并且只有这些频道的订阅功能,您可以将功能设置为 [=11] =].但是你还是需要给他们一个令牌。
通读 https://www.ably.io/documentation/general/authentication for documentation on Ably's auth model, and https://www.ably.io/documentation/realtime/authentication 以专门验证实时连接。
编辑:您指出您也传递了一个密钥。客户端不能同时使用两者——它要么与密钥连接,要么从 authUrl 获取令牌并与之连接——因此它可能只是忽略其中之一。删除您不想使用的那个。
编辑:我还建议删除禁用 Tls 和更改 http 超时的选项,并将它们保留为默认值。除非您出于某些特殊原因禁用 tls,否则出于安全原因,我们强烈建议将其保持启用状态。