[英]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.