SignalR服务器抛出“;不正确的内容类型”;
本文关键字:类型 不正确 SignalR 服务器 | 更新日期: 2023-09-27 18:28:13
在转到必要的应用程序(Android)之前,我正试图创建一个以控制台应用程序为客户端的SignalR示例,但我遇到了一个小问题。我的服务器是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;
}
}
我做错什么了吗?如果有任何帮助/想法,我将不胜感激,谢谢。
我不确定您可能使用的AspNet.SignalR.Client 2.2是否与Server 3.0完全兼容。然而,对于4.5.1,在将websocket支持添加到web服务器(Kestrel)之后,我就可以工作了
在project.json:
Microsoft.AspNet.WebSockets.Server": "1.0.0-rc1-final",
在Startup.cs:
中
app.UseWebSockets();
您还可以使用仍处于早期开发阶段的本机cpp客户端。https://github.com/aspnet/SignalR-Client-Cpp(目前似乎只支持websocket)。