我有一个使用ASP.NET Zero模板的项目。我已成功将SignalR集成到我的解决方案中,实时通知工作正常。我想要的是在我的解决方案中添加另一个集线器或扩展现有的SignalR集线器以向其添加更多内容。
在SignalR AspNetCore Integration文档中,它说要将以下内容添加到 Startup.cs 文件中:
app.UseSignalR(routes =>
{
routes.MapHub<AbpCommonHub>("/signalr"); // default hub
routes.MapHub<HitchNotification.HitchHub>("/hitchHub"); // my hub
});
然而,问题是我需要设置连接的客户端!在 SignalRAspNetCoreHelper.ts 中,它将URL设置为使用'/signalr'
集线器(默认值为1)。
export class SignalRAspNetCoreHelper {
static initSignalR(): void {
var encryptedAuthToken = new UtilsService().getCookieValue(AppConsts.authorization.encrptedAuthTokenName);
abp.signalr = {
autoConnect: true,
connect: undefined,
hubs: undefined,
qs: AppConsts.authorization.encrptedAuthTokenName + "=" + encodeURIComponent(encryptedAuthToken),
url: AppConsts.remoteServiceBaseUrl + '/signalr'
};
jQuery.getScript(AppConsts.appBaseUrl + '/assets/abp/abp.signalr-client.js');
}
}
如果我将'/signalr'
更改为'/hitchHub'
,则可以正常使用。但我想在我的申请中都有!我尝试为自己的集线器创建一个类似于 SignalRAspNetCoreHelper.ts 的帮助器,并在 app.component.ts 中初始化它:
ngOnInit(): void {
if (this.appSession.application && this.appSession.application.features['SignalR']) {
if (this.appSession.application.features['SignalR.AspNetCore']) {
SignalRAspNetCoreHelper.initSignalR();
HitchHubHelper.initHitchHub();
}
}
}
但似乎abp.signalr
无法与不同的集线器建立多个连接。
所以,基本上我有两个问题:
有什么方法可以将我自己的集线器功能添加到默认AbpCommonHub
?这样,我可以简单地修改 abp.signalr-client.js 文件。
如果上述情况不可能,我如何在abp.signalr
上设置多个集线器,以便在我的应用程序中随处访问?
答案 0 :(得分:0)
- 有没有办法可以将我自己的集线器功能添加到现有的默认AbpCommonHub中?这样我就可以简单地修改abp.signalr-client文件
醇>
不确定。继承AbpCommonHub
:
public class HitchHub: AbpCommonHub
{
// Ctor omitted for brevity
public async Task SendMessage(string message)
{
await Clients.All.SendAsync("getMessage", string.Format("User {0}: {1}", AbpSession.UserId, message));
}
}
替换中心:
// routes.MapHub<AbpCommonHub>("/signalr");
routes.MapHub<HitchHub>("/signalr");
- 如果上述情况不可能,我怎样才能在我的应用程序中的任何位置访问abp.signalr上的多个集线器?
醇>
上述情况并非不可能,但无论如何我都会回答这个问题来演示多个集线器(对于Angular)。
继承AbpHubBase
:
public class HitchHub : AbpHubBase, ITransientDependency
{
public async Task SendMessage(string message)
{
await Clients.All.SendAsync("getMessage", string.Format("User {0}: {1}", AbpSession.UserId, message));
}
}
地图中心:
routes.MapHub<AbpCommonHub>("/signalr"); // No change
routes.MapHub<HitchHub>("/signalr-hitchHub"); // Prefix with '/signalr'
这需要Abp.AspNetCore.SignalR
v3.5.0-preview3
。
修改 SignalRAspNetCoreHelper.ts :
abp.signalr = {
autoConnect: true, // No change
connect: undefined, // No change
hubs: undefined, // No change
qs: AppConsts.authorization.encrptedAuthTokenName + "=" + ... // No change
remoteServiceBaseUrl: AppConsts.remoteServiceBaseUrl, // Add this
startConnection: undefined, // Add this
url: '/signalr' // Changed from: AppConsts.remoteServiceBaseUrl + '/signalr'
};
// Modify the following block
jQuery.getScript(AppConsts.appBaseUrl + '/assets/abp/abp.signalr-client.js', () => {
var hitchHub;
abp.signalr.startConnection('/signalr-hitchHub', function (connection) {
hitchHub = connection; // Save a reference to the hub
connection.on('getMessage', function (message) { // Register for incoming messages
console.log('received message: ' + message);
});
}).then(function (connection) {
abp.log.debug('Connected to hitchHub server!');
abp.event.trigger('hitchHub.connected');
});
abp.event.on('hitchHub.connected', function() { // Register for connect event
hitchHub.invoke('sendMessage', "Hi everybody, I'm connected to the chat!"); // Send a message to the server
});
});