Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 19123|Відповідь: 1

[ASP.NET] mvc 4.0 Як користуватися SignalR (2)

[Копіювати посилання]
Опубліковано 05.07.2017 11:15:08 | | | |
Спочатку я створив нову папку Hubs під проєктом

Також створіть новий файл PositionVehicle під папкою, як показано на наступному рисунку:



Перебудуємо проєкт, а потім посилаємося на наступні два js-файли на сторінці перегляду



Примітка!!!

Файл "/Scripts/jquery.signalR-2.2.2.min.js" додається до інсталяції SignalR і знаходиться на фізичному диску

"/signalr/hubs" — цеSignalR генерується автоматично, який не можна знайти на фізичному диску!

Давайте розглянемо js-файл, згенерований SignalR, наступним чином:

/*!
* ASP.NET JavaScript бібліотека SignalR v2.2.2
* http://signalr.net/
*
* Авторські права (c) .NET Foundation. Всі права захищені.
* Ліцензовано під ліцензією Apache, версія 2.0. Дивіться License.txt у root проєкту для інформації про ліцензію.
*
*/

<reference path="..\.\SignalR.Client.JS\Scripts\jquery-1.6.4.js" />
<reference path="jquery.signalR.js" />
(функція ($, вікно, невизначено) {
    <param name="$" type="jQuery" />
    «використовувати суворо»;

    якщо (typeof ($.signalR) !== "функція") {
        throw new Error("SignalR: SignalR не завантажений. Будь ласка, переконайтеся, що jquery.signalR-x.js згадується перед ~/signalr/js.");
    }

    var signalR = $.signalR;

    function makeProxyCallback(hub, callback) {
        Функція повернення () {
            Викликайте метод client hub
            callback.apply(hub, $.makeArray(arguments));
        };
    }

    function registerHubProxies(instance, shouldSubscribe) {
        var key, hub, memberKey, memberValue, subscriptionMethod;

        для (ключ у прикладі) {
            якщо (instance.hasOwnProperty(ключ)) {
                hub = instance[key];

                якщо (!( hub.hubName)) {
                    Не клієнтський хаб
                    продовжити;
                }

                if (shouldSubscribe) {
                    Ми хочемо підписатися на події хабу
                    subscriptionMethod = hub.on;
                } else {
                    Ми хочемо відписатися від хаб-подій.
                    subscriptionMethod = hub.off;
                }

                Пройдіть по всьому учаснику хабу та знайдіть функції клієнтського хабу для підписки/відписки
                for (memberKey у hub.client) {
                    if (hub.client.hasOwnProperty(memberKey)) {
                        memberValue = hub.client[memberKey];

                        якщо (!$.isFunction(memberValue)) {
                            Це не функція клієнтського хабу
                            продовжити;
                        }

                        subscriptionMethod.call (hub, memberKey, makeProxyCallback(hub, memberValue));
                    }
                }
            }
        }
    }

    $.hubConnection.prototype.createHubProxies = function () {
        VAR проксі = {};
        this.starting(function () {
            Зареєструйте хаб-проксі як підписані
            (екземпляр, має підписатися)
            registerHubProxies (proxies, true);

            this._registerSubscribedHubs();
        }).disconnected(function () {
            Відписайтеся від усіх проксі хаба, коли ми «відключаємося».  Це робиться для того, щоб ми не додавали функціональні зворотні виклики.
            (екземпляр, має підписатися)
            registerHubProxies (проксі, хибно);
        });

        proxies['positionVehicle'] = this.createHubProxy('positionVehicle');
        proxies['positionVehicle'].client = { };
        proxies['positionVehicle'].server = {
            hello: function (name) {
                return proxies['positionVehicle'].invoke.apply(proxies['positionVehicle'], $.merge(["Hello"], $.makeArray(arguments)));
             }
        };

        повернення проксі;
    };

    signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false });
    $.extend(signalR, signalR.hub.createHubProxies());

}(window.jQuery, вікно));


Потім протестуємо, і код виглядає так:



Результати тесту такі:


Перші два повідомлення, які ми отримали, були надіслані нами самі, і ми теж їх отримали, а третє повідомлення надіслав я, який відкрив інший браузер, і ми теж його отримали.

Коли я отримав повідомлення, це був не вебсокет, а HTTP-опитування, бо наш js повідомив про помилку

Щодо причини повідомлення про помилку js, про це поговоримо наступного разу.









Попередній:asp.net mvc4.0 Встановлення SignalR (1)
Наступний:Код помилки: 1175. Ви використовуєте безпечний режим оновлення і намагалися оновити та...
 Орендодавець| Опубліковано 05.07.2017 14:53:15 |
. .NET з'являється за допомогою SignalRПомилка під час рукостискання WebSocket
Під час розробки я зіткнувся з такою помилкою: підключення WebSocket до 'ws://*****' не вдалося: Помилка під час WebSocket handshake: net::ERR_CONNECTION_RESET.

Причина, чому websocket не можна використовувати, полягає в тому, що файл web.config не налаштований. Для коректного запуску SignalR потрібно додати наступний конфігураційний елемент у вузол system.web:



targetFramework встановлений на 4.5
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com