0

我试图实现一些简单的 SignalR 功能。我查阅了一些教程,并能够在合理的时间内从服务器触发 javascript 代码。然而,反过来,似乎对我不起作用。每当我尝试从 javascript 调用服务器方法时,客户端方法都会触发,向服务器发送请求,但服务器端没有任何反应。该请求具有正常的 200 状态码,但使用 firebug 我得到了以下 xml 返回:

XML-parseError:找不到元素位置:moz-nullprincipal:{b526d81f-4593-4eac-b81d-ebc4a3ef6a39} 行号 1,Col 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>

的JavaScript:

    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 功能按预期工作;回应是乒乓球

编辑 2: onConnect 也被解雇,所以它在连接中没有任何内容。它似乎只是不想触发自定义方法。

4

2 回答 2

0

您看到的问题不是由于 SignalR。SignalR 与 XML 没有任何关联(它只使用 JSON)。此外,您的代码在一个假设下看起来很准确:

<script src="http://localhost:50287/signalr/hubs"></script>

可以重写为

<script src="/signalr/hubs"></script>

这意味着您不是在做跨域 SignalR,您只是碰巧通过完整路径包含集线器文件。

于 2013-10-23T16:18:47.100 回答
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 回答