私はsignalRチャットアプリを使用しました(このチュートリアルで説明されているようにhttp://sergiotapia.com/2011/09/signalr-with-mvc3-chat-app-build-asynchronous-real-time-persistant-connection-websites/)スタンドアロンのテストサイトで、すべてがうまく機能します。
私は今、それを私のより大きなプロジェクトに取り入れようとしています。
残念ながら、私の大規模なプロジェクトではbody onload関数が定義されているため、標準のjquery $(function(){});を使用しません。ページの読み込み時に処理を実行するための構文。これは今のところそれほど問題ではありません。ほとんどのjqueryプラグインとスクリプトは、私のbodyonloadによって呼び出される関数で実行されます。
しかし、何らかの理由で、私のsignalRコードが実行されていません。
上に示したものとまったく同じコードですが、私の体の負荷にのみ呼び出されます。
ページが読み込まれ、/ signalr / negotiate(URLとclientIDを返す)に投稿されます
動作する私のサンプルアプリでは、/ signalr / connectへの継続的な投稿を行い
ます。他のアプリでは、現在表示されているページに1回だけアクセスします。
接続するためのポストを作成していません。
これを手動で呼び出す方法はありますか?これが機能していないページのソースです。JQuery自体を参照しない理由は、マスターページに読み込まれているためです。JQueryが存在します。
<script src="/public/javascript/jquery.signalR.min.js">
<script src="/public/javascript/json2.js">
<script type="text/javascript" src="/signalr/hubs">
<div>
<input type="text" id="msg" />
<input type="button" id="broadcast" />
<ul id="messages"></ul>
</div>
<script type="text/javascript">
function ExecuteOnLoad() {
// Proxy created on the fly
var chat = $.connection.chat;
// Declare a function on the chat hub so the server can invoke it
chat.addMessage = function (message) {
$('#messages').append('<li>' + message + '</li>');
};
$("#broadcast").click(function () {
// Call the chat method on the server
chat.send($('#msg').val());
});
// Start the connection
$.connection.hub.start();
}
</script>
編集:ここにチャットハブがあります
public class Chat : SignalR.Hubs.Hub
{
public void Send(string message)
{
//Call the addMessage method on all clients.
Clients.addMessage(message);
}
}
ダブルエディット:わかりました。mvcプロジェクトで標準のhtmlページを作成し、onloadイベントを再度接続すると、すべてが正常に機能します。問題は、電話をかけたときにポーリングが機能していないように見えることのようです
$.connection.hub.start();
代わりに、現在のURLに取得し、getリクエストでページを再度返します。