DNN 8 (DotNetNuke) 如何配置 SignalR?
DNN 8 (DotNetNuke) How to configure SignalR?
对于我的一个项目,我必须使用 DNN。
我创建了一个常规 ASP.NET 项目,我在其中试验了 SignalR,它运行良好。
但在 DNN 版本 8 中,在安装 SignalR NuGet 包之后,Core 和 JS 并创建启动 class 如下所示:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
像这样的测试中心 class:
public class MyTestHub : Hub
{
public void Hello(string message)
{
//Clients.All.hello();
// set all clients
var clients = Clients.All;
// call javascript function
clients.test("This is a test");
Trace.WriteLine(message);
}
}
最后是索引页:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
DNN 8 SignalR TestPage
</div>
</body>
</html>
<script src="~/DesktopModules/MVC/AC_ChatTest1/Scripts/jquery.signalR-2.4.1.min.js"></script>
<script src="~/signalr/hubs"></script>
<script>
$(function () {
console.log('in on ready');
// set up the hub connection
var hub = $.connection.mytest;
console.log(hub);
// define JS function that is called from
hub.client.test = function (msg) {
console.log(msg);
}
$.connection.hub
.start()
.done(function () {
hub.server.hello("SignalR is working.");
})
});
</script>
我收到这个错误:
我认为:
// set up the hub connection
var hub = $.connection.mytest;
应该是:
// set up the hub connection
var hub = $.connection.myTestHub;
您是在 DNN 模块的上下文中执行此操作吗?
如果是这样,你应该看看这个:https://www.chrishammond.com/Blog/itemid/2624/using-signalr-with-dotnetnuke-modules。 Chris 的模块也可以在 GitHub 上找到。
如果没有,您应该切换到一个模块并认真对待 Chris 的解决方案。
我明白了,这些是使 signalR 在 DNN 7.1+ 中工作所需的步骤:
- 安装 NuGet 包。
- 像这样创建一个初创公司class:
[assembly: OwinStartup(typeof(Startup))]
namespace MyNamespace.MyModuleName
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
- 消除错误localhost/signalr/hubs (404 not found) 需要在DNN中修改dbo.hostsettings table 所以运行 这个查询:
IF NOT EXISTS (SELECT * FROM dbo.hostsettings WHERE SettingName =
'AUM_DoNotRewriteRegEx' )
insert into dbo.hostsettings
(SettingName
, SettingValue
, SettingIsSecure
, CreatedByUserId
, CreatedOnDate
, LastModifiedByUserId
, LastModifiedOnDate
)
values(
'AUM_DoNotRewriteRegEx'
,'/DesktopModules/|/Providers|/LinkClick\.aspx|/SignalR'
, 0
, -1
, GETDATE()
, -1
, GETDATE()
)
GO
IF EXISTS (SELECT * FROM dbo.hostsettings WHERE SettingName = 'AUM_DoNotRewriteRegEx'
and SettingValue not like '%/signalr%' )
update dbo.hostsettings
set settingValue = (select settingValue + '|/signalr' from dbo.hostsettings where
settingname = 'AUM_DoNotRewriteRegEx')
where settingname = 'AUM_DoNotRewriteRegEx'
GO
对于我的一个项目,我必须使用 DNN。 我创建了一个常规 ASP.NET 项目,我在其中试验了 SignalR,它运行良好。
但在 DNN 版本 8 中,在安装 SignalR NuGet 包之后,Core 和 JS 并创建启动 class 如下所示:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
像这样的测试中心 class:
public class MyTestHub : Hub
{
public void Hello(string message)
{
//Clients.All.hello();
// set all clients
var clients = Clients.All;
// call javascript function
clients.test("This is a test");
Trace.WriteLine(message);
}
}
最后是索引页:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
DNN 8 SignalR TestPage
</div>
</body>
</html>
<script src="~/DesktopModules/MVC/AC_ChatTest1/Scripts/jquery.signalR-2.4.1.min.js"></script>
<script src="~/signalr/hubs"></script>
<script>
$(function () {
console.log('in on ready');
// set up the hub connection
var hub = $.connection.mytest;
console.log(hub);
// define JS function that is called from
hub.client.test = function (msg) {
console.log(msg);
}
$.connection.hub
.start()
.done(function () {
hub.server.hello("SignalR is working.");
})
});
</script>
我收到这个错误:
我认为:
// set up the hub connection
var hub = $.connection.mytest;
应该是:
// set up the hub connection
var hub = $.connection.myTestHub;
您是在 DNN 模块的上下文中执行此操作吗?
如果是这样,你应该看看这个:https://www.chrishammond.com/Blog/itemid/2624/using-signalr-with-dotnetnuke-modules。 Chris 的模块也可以在 GitHub 上找到。
如果没有,您应该切换到一个模块并认真对待 Chris 的解决方案。
我明白了,这些是使 signalR 在 DNN 7.1+ 中工作所需的步骤:
- 安装 NuGet 包。
- 像这样创建一个初创公司class:
[assembly: OwinStartup(typeof(Startup))] namespace MyNamespace.MyModuleName { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } }
- 消除错误localhost/signalr/hubs (404 not found) 需要在DNN中修改dbo.hostsettings table 所以运行 这个查询:
IF NOT EXISTS (SELECT * FROM dbo.hostsettings WHERE SettingName = 'AUM_DoNotRewriteRegEx' ) insert into dbo.hostsettings (SettingName , SettingValue , SettingIsSecure , CreatedByUserId , CreatedOnDate , LastModifiedByUserId , LastModifiedOnDate ) values( 'AUM_DoNotRewriteRegEx' ,'/DesktopModules/|/Providers|/LinkClick\.aspx|/SignalR' , 0 , -1 , GETDATE() , -1 , GETDATE() ) GO IF EXISTS (SELECT * FROM dbo.hostsettings WHERE SettingName = 'AUM_DoNotRewriteRegEx' and SettingValue not like '%/signalr%' ) update dbo.hostsettings set settingValue = (select settingValue + '|/signalr' from dbo.hostsettings where settingname = 'AUM_DoNotRewriteRegEx') where settingname = 'AUM_DoNotRewriteRegEx' GO