DNN 8 (DotNetNuke) Как настроить SignalR? - PullRequest
0 голосов
/ 07 января 2020

Для одного из моих проектов я должен использовать DNN. Я создал обычный проект ASP. NET, в котором я экспериментировал с SignalR, и он отлично работает.

Но в DNN версии 8 после установки пакетов SignalR NuGet как Core, так и для JS и создания класс запуска, такой как:

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }

класс testhub, такой как:

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>

Я получил это ошибка:

enter image description here

Ответы [ 3 ]

1 голос
/ 07 января 2020

Вы делаете это в контексте модуля DNN?

Если это так, вы должны взглянуть на это: https://www.chrishammond.com/Blog/itemid/2624/using-signalr-with-dotnetnuke-modules. Модуль Chris также доступен на GitHub.

Если нет, вам следует переключиться на модуль и серьезно подходить к решению Chris.

0 голосов
/ 07 января 2020

Я понял это, это шаги, необходимые для работы signalR в DNN 7.1 +:

  1. Установка пакетов NuGet.
  2. Создайте класс запуска, подобный этому:
[assembly: OwinStartup(typeof(Startup))]
    namespace MyNamespace.MyModuleName
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.MapSignalR();
            }
        }
    }
Для устранения ошибки localhost / signalr / hubs (404 не найдено) Необходимо изменить таблицу dbo.hostsettings в DNN, поэтому выполните этот запрос:
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
0 голосов
/ 07 января 2020

Я думаю это:

            // set up the hub connection
        var hub = $.connection.mytest;

Должно быть:

            // set up the hub connection
        var hub = $.connection.myTestHub;
...