私はこのチュートリアルを使用しています:https://docs.microsoft.com/en-us/aspnet/signalr/overview/older-versions/tutorial-server-broadcast-with-aspnet-signalrシングルトンに格納されたConextからメッセージをブロードキャストします。私はいくつかの問題があります。SignalRバージョン1.2.2クライアント側メソッドが呼び出されておらず、コンソールログも作成されていません
まず、ハブを割り当ててクライアント側から接続することで問題はないようです。これは私のコードです:
$(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 = function(test){..."がサーバー側から呼び出されることはありません。
これは私のシングルトンです:
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()
{
}
}
だから、私は戻って、放送上のクライアント関数の呼び出しを取得し、たとえていないI私のロギングをtrueに設定すると、ブラウザのコンソールにログが表示されません。どこからトラブルシューティングを始めますか?または私は何を間違っているのですか?ありがとうございました。
更新:私自身の診断を誤解しました。
if ($.connection.hub.state === $.signalR.connectionState.disconnected) {
トリガされているため、接続が何らかの理由で開始されていません。また、.doneと.failは決して入力されず、コンソールメッセージは一切得られません。
アップデート2:リターンdeferred.promise(上のように、とは何かを持っていると思わ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();
}
は)それはSignalR.jsを出て戻ってきますUIの呼び出しスクリプトに渡します。
JSはOKと思われます。ブレークポイントを設定し、C#メソッドの 'BroadcastDmrUpdate'メソッドが呼び出されていることを確認できますか? –
@FrankModicaはい私はそれを言及するのを忘れました。私はブレークポイントを設定していましたが、そのメソッドを呼び出して呼び出し、Clients.All.broadcastDmrUpdate(dmr);しかし、私はクライアント側から何の反応も行動も得られません。 – eaglei22
あなたは 'RouteTable.Routes.MapHubs();'を持っていますか? –