.Net 客户端可以与 azure signalR 服务通信吗?
Can .Net Client communicate with azure signalR service?
我刚开始使用 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”
集线器启动文件实现如下:
{
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 服务平台上没有添加新客户)
由于我是这个概念的新手,我相信我可能由于兼容性问题而遗漏了一些要点,所以我将不胜感激任何关于这个问题的澄清。
谢谢
所以我弄清楚了问题所在,似乎 .net v4.7 和 .net v4 之间存在包不兼容问题。我将所有包迁移到以下:
- 包 id="Microsoft.AspNet.SignalR" 版本="2.4.1"
targetFramework="net48"
- 包 id="Microsoft.Azure.SignalR.AspNet" 版本="1.13.0"
targetFramework="net48"
- package id="Microsoft.AspNet.SignalR.Client" version="2.4.2"
targetFramework="net48"
谢谢大家的帮助。
我刚开始使用 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”
集线器启动文件实现如下:
{
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 服务平台上没有添加新客户)
由于我是这个概念的新手,我相信我可能由于兼容性问题而遗漏了一些要点,所以我将不胜感激任何关于这个问题的澄清。
谢谢
所以我弄清楚了问题所在,似乎 .net v4.7 和 .net v4 之间存在包不兼容问题。我将所有包迁移到以下:
- 包 id="Microsoft.AspNet.SignalR" 版本="2.4.1" targetFramework="net48"
- 包 id="Microsoft.Azure.SignalR.AspNet" 版本="1.13.0" targetFramework="net48"
- package id="Microsoft.AspNet.SignalR.Client" version="2.4.2" targetFramework="net48"
谢谢大家的帮助。