既存の Web アプリケーションで SignalR を使用すると問題が発生します。$.connection オブジェクトからハブを取得しようとすると、null が返されるため、「Unable to get property 'client' of undefined or null reference」という javaruntime 例外が発生します。
コードを投稿する前に、いくつかの背景と、すでに試したことを説明したいと思います。 - プロジェクトをローカルで実行すると、すべて正常に動作します。問題が発生するのは、プロジェクトを IIS の場所に展開したときだけです。- ハブ名が正しくキャメル ケースになっていることを確認しました。繰り返しますが、ローカルでは問題なく動作し、プロジェクトを IIS にデプロイした後にのみエラーがスローされます。- すべての JavaScript が正常に読み込まれたことを確認しました。JQuery ライブラリは 1 回だけ参照され、正常にロードされます。signalR javascript と、動的に作成されたシグナル/ハブも同様です。- 新しいプロジェクトを作成し、既存の Web アプリケーションの下で Web アプリとして実行されている新しい Web アプリケーションと同じコードを実行すると、すべて正常に動作します (新しいプロジェクトで同じコードが使用されています)。
誰が問題が何であるかについて何か考えがありますか?
ハブ コード:
Imports Microsoft.AspNet.SignalR
Public Class TestHub
Inherits Hub
Public Sub Connect()
Try
Clients.Caller.onConnect(Context.ConnectionId)
Catch ex As Exception
LogMessage("ERROR Connecting to Hub", 0, 0, "ERROR")
End Try
End Sub
End Class
ウェブページコード:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="Scripts/jquery-1.6.4.min.js"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-1.1.3.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="signalr/hubs"></script>
<script type="text/javascript">
$(function () {
// Declare a proxy to reference the hub.
var thub = $.connection.testHub;
registerClientMethods(thub);
// Start Hub
$.connection.hub.start().done(function () {
registerEvents(thub);
thub.server.connect();
alert('connected!');
});
});
function registerClientMethods(thub) {
thub.client.onConnect = function (id) {
$('#lblConnectionID').text(id);
}
}
function registerEvents() {
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblConnectionID" runat="server" />
</div>
</form>
</body>
</html>
Global.asax コード:
Imports System.Web.Routing
Imports Microsoft.AspNet.SignalR
Public Class Global_asax
Inherits System.Web.HttpApplication
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Fires when the application is started
Try
' Register the default hubs route: ~/signalr/hubs
RouteTable.Routes.MapHubs()
Catch ex As Exception
LogMessage("ERROR initializing SignalR: " & ex.Message, 0, 0, "ERROR")
End Try
End Sub
...
したがって、私のページ SignalRTest.aspx に移動すると、行thub.client.onConnected = ...が javascript エラーをスローします:「未定義または null 参照のプロパティ 'client' を取得できません」
誰がこれを引き起こしているのか知っていますか? ありがとうございました。
[編集] - 動作中の signalr/hubs.js ファイルと動作していないファイルを比較したところ、次の部分が欠落していることがわかりました。
proxies.testHub= this.createHubProxy('testHub');
proxies.testHub.client = { };
proxies.testHub.server = {
connect: function () {
return proxies.transactionHub.invoke.apply(proxies.testHub, $.merge(["Connect"], $.makeArray(arguments)));
}
};
これが signalr/hubs.js ファイルに含まれない理由について何か考えはありますか? Global.asax で MapHubs() を呼び出しています...
ありがとう!
[修正] 宛先 Web アプリケーションの Bin フォルダーを削除し、再デプロイしました。何が違うのかはまだわかりません。すべての .DLL は同じです。それは今でも動作します。奇数。