0

シンプルな SignalR 機能を実装しようとしています。いくつかのチュートリアルを調べたところ、妥当な時間内にサーバーから JavaScript コードを起動することができました。ただし、その逆は、私にはうまくいかないようです。JavaScript からサーバー メソッドを呼び出そうとするたびに、クライアント メソッドが起動し、サーバーにリクエストが送信されますが、サーバー側では何も起こりません。リクエストには通常の 200 ステータス コードがありますが、firebug を使用すると、次の xml が返されます。

XML-parseError: 要素が見つかりません場所: moz-nullprincipal:{b526d81f-4593-4eac-b81d-ebc4a3ef6a39} Rownumber 1, Coll 1:^

これが何か関係があるかどうかはわかりませんが、私が得る唯一のフィードバックです。

ハブ:

namespace MusicSharing
{
public class PlayerHub : Hub
{
    public string Connect(string userName)
    {
        var test = userName;
        return userName;
    }
}
}

スクリプト参照の追加:

<script type="text/JavaScript" src="Scripts/jquery-2.0.3.min.js"></script> 
<script type="text/javascript" src="Scripts/jquery.signalR-2.0.0.min.js"></script>
<script src="http://localhost:50287/signalr/hubs"></script>

ジャバスクリプト:

    var chat = $.connection.playerHub;

    $.connection.hub.start().done(function () {
        chat.server.connect("testing");
    });

起動:

using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(MusicSharing.Startup))]
namespace MusicSharing
{

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.MapSignalR();
    }
}
}

これは基本的に、SignalR に関して私が持っているすべてのコードです。私は何かを逃していますか..?

編集: ping 機能は期待どおりに機能します。返事はポン

EDIT 2: onConnect も起動されるため、接続には何もありません。カスタムメソッドを起動したくないようです。

4

2 に答える 2

0

「接続」メソッドは、サーバーがクライアントを呼び出すためのものです。クライアントからサーバー コードを呼び出したい場合は、ajax を使用してみてください。MVC コントローラー メソッドを呼び出す高レベルの例を次に示します。

public class PlayerHub : Hub
{
    //This server method would be called from another class or controller
    //In turn it will call the client 
    public string Connect(string userName)
    {
        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<JobInfoHub>();            
        context.Clients.All.doSomething();
    }
}

var chat = $.connection.playerHub;

$.connection.hub.start();

//This is called from your hub
chat.client.doSomething= function (userName) {
    alert(userName);
    callServerMethod();

};

function callServerMethod() {
$.ajax({
    url: '../Controller/Method',
    type: 'GET',
    global: false,
    datatype: 'json',
    success: function (data) {

      }
    }
});
于 2014-01-21T15:25:54.703 に答える