【问题标题】:Can .Net Client communicate with azure signalR service?.Net 客户端可以与 azure signalR 服务通信吗?
【发布时间】:2021-11-17 16:37:58
【问题描述】:

我是使用 Azure signalR 服务的新手,我有点困惑。

问题是我正在使用 .Net 4.8 客户端和带有自托管集线器的 javascript 客户端。

.net 客户端的代码如下:

using Microsoft.AspNet.SignalR.Client;
{
    public class SignalRHub : ISignalRHub
    {
        private const string HubName = "Hub";
        private readonly IHubProxy hub;
        private readonly HubConnection connection;

        public SignalRHub(string signalRUrl)
        {
            connection = new HubConnection(signalRUrl);
            connection.StateChanged += Connection_StateChanged;
            hub = connection.CreateHubProxy(HubName);
            connection.Start().Wait();
        }
        private void Connection_StateChanged(StateChange obj)
        {
            ...
        }

        public void Refreshed(string userId, string mId)
        {
                    hub.Invoke("refreshed", uId, mId);
        }
    }
}

signalRUrl 是这样的“http://localhost:8081/signalr”

hub启动文件实现如下:

        {
            var hubConfiguration = new HubConfiguration
            {
                EnableDetailedErrors = true,
            };

            // Any connection or hub wire up and configuration should go here
            app.MapSignalR("/signalr", hubConfiguration);
 }

这是中心文件

using Microsoft.AspNet.SignalR;

{
    public class Hub: Hub
    {
        public void Refreshed(string userId, string mId )
        {
            Guid userIdAsGuid;
            if (Guid.TryParse(userId, out userIdAsGuid))
            {
                Clients.Group(userId).Refresh(mId);
            }
        }

        public void JoinGroup(string groupName)
        {
            Groups.Add(Context.ConnectionId, groupName);
        }
    }
}

上面的代码运行良好,我没有任何问题。 我的问题是何时我想迁移到 Azure SignalR 服务。我使用了这个文档https://docs.microsoft.com/en-us/azure/azure-signalr/signalr-quickstart-dotnet

我把启动代码改成

 app.MapAzureSignalR(this.GetType().FullName, hubConfiguration);

我添加了端点,对于 javascript 客户端,我将其更新为 jquery.signalR-2.4.1,它工作正常(正在创建套接字)

但是,对于 .net 客户端,没有迹象表明是否要更改以及它是否真的与之兼容。

所以我目前拥有的是一个半工作的应用程序: javascript 端工作并向 azure Signalr 服务发送请求(它可以使用 JoinGroup)但是没有响应并且 .net 客户端似乎没有与集线器通信(在 Azure SignalR 服务平台上没有新客户端是正在添加)

由于我是这个概念的新手,我相信我可能由于兼容性问题而遗漏了一些要点,因此我将感谢您对此主题的任何澄清。

谢谢

【问题讨论】:

  • 你添加Azure:SignalR:ConnectionString连接字符串了吗?
  • @stuartd 是的,我确实将它添加到托管中心的项目中
  • 如果您在 Web 应用中托管自己的信号,则不需要 Azure SignalR 服务。
  • @GH DevOps 你能详细说明一下吗?一位开发人员建议出于可扩展性目的使用 Azure SignalR 服务,而不是自托管 Signalr
  • 小心;我认为您的网络框架信号器兼容客户端不会与您建议的网络核心信号器服务器一起使用。请参阅docs.microsoft.com/en-us/aspnet/core/signalr/… 并确保您所拥有的两端是兼容的

标签: c# .net signalr azure-signalr


【解决方案1】:

所以我想出了问题所在,似乎 .net v4.7 和 .net v4 之间存在软件包不兼容问题。我将所有软件包迁移到以下位置:

  • 包 id="Microsoft.AspNet.SignalR" 版本="2.4.1" targetFramework="net48"
  • 包 id="Microsoft.Azure.SignalR.AspNet" 版本="1.13.0" targetFramework="net48"
  • 包 id="Microsoft.AspNet.SignalR.Client" 版本="2.4.2" targetFramework="net48"

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 2019-03-07
    • 2014-08-28
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多