SignalR-Server抛出"不正确的内容类型"

时间:2015-12-27 13:04:00

标签: c# signalr asp.net-core signalr-hub

我尝试使用控制台应用程序作为我的客户端创建一个有效的SignalR示例,然后再转移到必要的(Android),但我面临一个奇怪的问题。我的服务器是ASP.NET 5(DNX Core 5.0),服务器库是SignalR.Server 3.0.0-rc1-final。

到目前为止,这是我的客户端代码:

private static void Main(string[] args)
{
    var connection = new HubConnection("http://127.0.0.1:5000/");
    var myHub = connection.CreateHubProxy("TestHub");

    connection.Start().ContinueWith(task => {
        if (task.IsFaulted)
        {
            Console.WriteLine(task.Exception.GetBaseException());
        }
        else {
            Console.WriteLine("Connected");
        }

    }).Wait();

    myHub.Invoke<string>("Send", "Hello World!").ContinueWith(task => {
        if (task.IsFaulted)
        {
            Console.WriteLine(task.Exception.GetBaseException());
        }
        else {
            Console.WriteLine(task.Result);
        }
    });
}

connection.Start()方法有效,但在尝试调用Send()时,出现以下错误:

  

System.InvalidOperationException:不正确的内容类型:       在Microsoft.AspNet.Http.Features.Internal.FormFeature.d__12.MoveNext()       ...

我的第一个想法是尝试将Content-Type标头添加到连接中:

connection.Headers.Add("Content-Type", "application/json");

但是在下一次连接/调用尝试时会产生以下错误:

  

未使用的标题名称。确保使用请求标头   HttpRequestMessage,带有HttpResponseMessage的响应头,以及   带有HttpContent对象的内容标题。

此外,在服务器日志中,我发现它已经application/json,所以我对此异常感到有点困惑。

这是我服务器上的中心,但它并不真正相关,因为它没有达到Send方法。

[HubName("TestHub")]
public class TestHub : Hub
{
    public string Send(string message)
    {
        return message;
    }
}

我做错了吗?我会感激任何帮助/想法,谢谢。

1 个答案:

答案 0 :(得分:2)

我不确定您可能使用的AspNet.SignalR.Client 2.2是否与Server 3.0完全兼容。但是对于4.5.1我在向Web服务器(Kestrel)添加websocket支持后才开始工作。

在project.json中:

Microsoft.AspNet.WebSockets.Server":  "1.0.0-rc1-final",

在Startup.cs中:

app.UseWebSockets();

您还可以使用仍处于早期开发阶段的本机cpp客户端。 https://github.com/aspnet/SignalR-Client-Cpp(目前似乎只支持websockets)。