我尝试使用控制台应用程序作为我的客户端创建一个有效的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;
}
}
我做错了吗?我会感激任何帮助/想法,谢谢。
答案 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)。