簡體   English   中英

未調用SignalR 1.2.2版客戶端方法,也未進行控制台日志記錄

[英]SignalR version 1.2.2 client side method not being called, nor is console logging being made

我正在使用本教程: https ://docs.microsoft.com/zh-cn/aspnet/signalr/overview/older-versions/tutorial-server-broadcast-with-aspnet-signalr從存儲在單例中的Conext廣播消息。 我有幾個問題。

首先,分配集線器和從客戶端建立連接似乎沒有任何問題。 這是我的代碼:

  $(function () {
      var transactionHub = $.connection.TransactPtHub; // the generated client-side hub proxy

      transactionHub.client.broadcastDmrUpdate = function (test) {

          alert("Yo-Yo Ma!!" + test);
      };
      console.log('test');
      $.connection.hub.logging = true;
      $.connection.hub.start()
          .done(function () { console.log('Now connected, connection ID=' + $.connection.hub.id); })
          .fail(function () { console.log('Could not Connect!'); });

      if ($.connection.hub.state === $.signalR.connectionState.disconnected) {
          alert("connected");
      }
      else {
          alert("not connected");
      }

  });

我的警報“已連接”確實顯示在頁面加載上。 此部分代碼中的函數“ transactionHub.client.broadcastDmrUpdate =函數(測試){...”)永遠不會從服務器端調用。

這是我的單身人士:

public class TransactPtSingleton
{
    private readonly static Lazy<TransactPtSingleton> _instance = new Lazy<TransactPtSingleton>(() => new TransactPtSingleton(GlobalHost.ConnectionManager.GetHubContext<TransactPtHub>().Clients));

    private TransactPtSingleton(IHubConnectionContext clients)
    {
        Clients = clients;
    }

    private IHubConnectionContext Clients
    {
        get;
        set;
    }

    public static TransactPtSingleton Instance
    {
        get
        {
            return _instance.Value;
        }
    }

    public void BroadcastDmrUpdate(string dmr)
    {
        Clients.All.broadcastDmrUpdate(dmr);
    }  
}

這是我的樞紐

[HubName("TransactPtHub")]
public class TransactPtHub : Hub
{
    public void UpdateDailyTransactionTable()
    {

    }
}

因此,我不會在廣播中打回客戶端功能,即使我將日志記錄設置為true,我的瀏覽器控制台中也看不到任何日志。 我從哪里開始進行故障排除? 還是我做錯了什么? 謝謝。

更新:我誤讀了自己的診斷信息。
if ($.connection.hub.state === $.signalR.connectionState.disconnected) {

正在觸發,因此由於某種原因連接未啟動。 另外,永遠不會輸入.done和.fail,而且我也永遠不會收到任何控制台消息。

更新2:梳理SignalR.js似乎與它有關,

        // Check to see if start is being called prior to page load
        // If waitForPageLoad is true we then want to re-direct function call to the window load event
        if (!_pageLoaded && config.waitForPageLoad === true) {
            connection._.deferredStartHandler = function () {
                connection.start(options, callback);
            };
            _pageWindow.bind("load", connection._.deferredStartHandler);

            return deferred.promise();
        }

與返回deferred.promise()一樣,它離開了SignalR.js並返回到UI中的調用腳本。

弄清楚了。 因此,這基本上源於回到我原來的問題在這里: 問題最初使用SignalR 1.2.2用jQuery版本3朵朵

從我的“更新2”

 if (!_pageLoaded && config.waitForPageLoad === true) {....

那是有問題的,因為隨着Jquery> 3中.load的棄用,我需要按照以下方式將.load更改為.on:

重大更改:.load()、. unload()和.error()已刪除

這些方法是事件操作的快捷方式,但是有一些API限制。 事件.load()方法與ajax .load()方法沖突。 由於DOM方法的定義方式,.error()方法不能與window.onerror一起使用。 如果您需要通過這些名稱附加事件,請使用.on()方法,例如,將$(“ img”)。load(fn)更改為$(“ img”)。on(“ load”,fn)。

來自: JQuery指南

但是我在jquery.signalR-1.2.2js里面亂搞,而不是更改,

_pageWindow.load(function () { _pageLoaded = true; });

_pageWindow.on("load", function () { _pageLoaded = true; });  

我做到了

_pageWindow.on(function () { _pageLoaded = true; });

沒有顯示任何控制台錯誤,因此使操作變得更加困難。 但是,現在可以從客戶端建立SignalR連接,並且SignalR日志記錄現在也可以工作。

因此,如果您將SignalR的舊版本與JQuery的較新版本一起使用,則可能是您的問題和解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM