C# 连接时出现未知错误使用Ably.io创建连接

C# 连接时出现未知错误使用Ably.io创建连接,c#,.net,connection,channel,ably-realtime,C#,.net,Connection,Channel,Ably Realtime,我们有一个用例,其中用户尚未登录到应用程序,并且没有创建身份验证令牌。应用程序需要连接到公共通道上的web服务器以检查应用程序更新。连接失败。错误原因如下:“未知错误;代码:500;HttpStatus代码:(404)未找到 Nuget 0.8.11中的数据库和SDK 以下代码未连接到web服务器 public ExtendedAblyIoClient(string name, string ClientId, string ChannelId, string AuthUrl, stri

我们有一个用例,其中用户尚未登录到应用程序,并且没有创建身份验证令牌。应用程序需要连接到公共通道上的web服务器以检查应用程序更新。连接失败。错误原因如下:“未知错误;代码:500;HttpStatus代码:(404)未找到

Nuget 0.8.11中的数据库和SDK

以下代码未连接到web服务器

    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

从您的问题来看,如果连接到“公共通道”,您似乎希望不必进行身份验证。这不是授权的工作方式;任何连接到您的应用程序的用户都需要进行身份验证,并具有要连接的令牌或api密钥,这就是身份验证的含义

如果您不希望它们连接到任何不在
公共:
命名空间中的通道,并且只具有这些通道的订阅功能,则可以将功能设置为
{“public:::::[“subscribe”]}
,但您仍然需要为它们提供一个令牌

通读有关Ably的auth模型的文档,特别是用于验证实时连接的文档

编辑:您指出您也在传递一个密钥。客户端不能同时使用这两个密钥——它要么与密钥连接,要么从authUrl获取令牌并与之连接——因此它可能只是忽略了其中一个。请删除您不想使用的密钥


编辑:我还建议删除禁用Tls和更改http超时的选项,并将其保留为默认值。除非您有禁用Tls的特定原因,否则出于安全原因,我们强烈建议将其保留为启用状态。

404将从客户端库中尝试联系您指定的AuthUrl,并获取ting a 404

从您的问题来看,如果连接到“公共通道”,您似乎希望不必进行身份验证。这不是授权的工作方式;任何连接到您的应用程序的用户都需要进行身份验证,并具有要连接的令牌或api密钥,这就是身份验证的含义

如果您不希望它们连接到任何不在
公共:
命名空间中的通道,并且只具有这些通道的订阅功能,则可以将功能设置为
{“public:::::[“subscribe”]}
,但您仍然需要为它们提供一个令牌

通读有关Ably的auth模型的文档,特别是用于验证实时连接的文档

编辑:您指出您也在传递一个密钥。客户端不能同时使用这两个密钥——它要么与密钥连接,要么从authUrl获取令牌并与之连接——因此它可能只是忽略了其中一个。请删除您不想使用的密钥


编辑:我还建议删除禁用Tls和更改http超时的选项,并将其保留为默认值。除非您有禁用Tls的特定原因,否则出于安全原因,我们强烈建议将其保留为启用状态。

文档中是否只需要令牌的ClientOptions AuthUrl字段ure-转到并滚动到authUrl。我还建议您阅读我们的常规身份验证文档(链接在答案中)这详细解释了可能的身份验证流。我们正在从Ably处获取用于安全连接的令牌,并且已经开始工作。文档中是否只有令牌才需要ClientOptions AuthUrl字段?当然-转到并滚动到AuthUrl。我还建议阅读我们的常规身份验证文档(答案中有链接)这详细解释了可能的身份验证流。我们正在从Ably获得用于安全连接的令牌,这已经起作用了。