1

我已经在我的 MVC 项目中安装了 signalR 的客户端和服务器;我可以从网络客户端调用我的集线器;

var testHub;
$(function () {
    // Setup SignalR
    testHub = $.connection.myhub;
    testHub.msg = function (ref) {
        alert(ref);
    };

    $.connection.hub.start(function () {
        testHub.addToQueue("TESTMSG");
    });

});

在控制器上,我需要在处理一些请求后调用我的集线器;所以我添加了对 SignalR.Client.dll -Version(0.5.2.0) 和 Newtonsoft.Json.dll(4.5.0.0) 运行时 4 的引用。

我的控制器调用如下

  var connection = new HubConnection("http://localhost:50439/");
        IHubProxy myHub = connection.CreateProxy("myhub");
        connection.Start().Wait();
        myHub.Invoke("addToQueue", new { message = "Hello world" }).ContinueWith(task =>
        {


        }, TaskContinuationOptions.OnlyOnFaulted);

我的集线器如下所示:

 [HubName("myhub")]
public class QueueHub:Hub
{
    public void addToQueue(string message)
    {
        Clients.msg(message);
    }
}

但是当来自控制器的调用发生时,系统会出现以下错误:读取字符串时出错。意外标记:StartObject。路径'',第 1 行,位置 46.,JsonSerializer

并详细说明:

---> (Inner Exception #0) System.AggregateException: One or more errors occurred
. ---> System.Net.WebException: The remote server returned an error: (500) Inter
nal Server Error.
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at SignalR.Client.Http.HttpHelper.<>c__DisplayClass2.<GetHttpResponseAsync>b_
_0(IAsyncResult ar) in C:\Documents and Settings\mrafeeq\My Documents\Downloads\
SignalR-SignalR-0.5.0-231-g7808c90\SignalR-SignalR-7808c90\SignalR.Client\Http\H
ttpHelper.cs:line 19
4

1 回答 1

2

您错误地调用了服务器端方法。你需要这样做:

myHub.Invoke("addToQueue", "Hello world").ContinueWith(task =>
{


}, TaskContinuationOptions.OnlyOnFaulted);
于 2012-07-06T16:39:05.020 回答