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+ 中工作所需的步骤:

  1. 安装 NuGet 包。
  2. 像这样创建一个初创公司class:
[assembly: OwinStartup(typeof(Startup))]
    namespace MyNamespace.MyModuleName
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.MapSignalR();
            }
        }
    }
  1. 消除错误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