Angular SignalR HubConnection给出了“协议错误:未知的传输。”#39;

时间:2018-01-07 21:46:31

标签: c# angular asp.net-web-api signalr angular-cli

我在http://localhost:8090/上运行了一个Owin-selfhosted API。 我使用以下代码创建了一个signalR hub:

app.UseCors(CorsOptions.AllowAll); //Inside Startup.cs
app.MapSignalR(); //Inside Startup.cs

//Inside own class file
public class SensorHub: Hub
{
    public void Send(string message)
    {
        Console.WriteLine("Send called with message argument: {0}", message);
        Clients.All.addMessage(message);
    }
}

我还制作了另一个C#客户端来测试我的signalR集线器,我从集线器获得响应,所以我认为它的功能和运行良好。请参阅以下代码:

//My working C# client
static void Main(string[] args)
{
    ServicePointManager.DefaultConnectionLimit = 10;
    var url = "http://localhost:8090/signalr";
    var hub = new HubConnection(url);

    var proxy = hub.CreateHubProxy("SensorHub");
    proxy.On("addMessage", message => Console.WriteLine("Data received: " + message));

    // Start hub connection
    Console.WriteLine("Starting hub connection at: {0}", url);
    hub.Start().Wait();
    Console.WriteLine("Hub connected with transport: {0}", hub.Transport.Name);

    // Call hub
    var list = new List<string>
    {
        "value1",
        "value2",
        "value3"
    };

    foreach (var value in list)
    {
        Console.WriteLine("Sending data to hub connection: {0}", value);
        proxy.Invoke("Send", value);
    }

    Console.Read();
}

我想与我的后端传感器和我的角网站建立连接。我安装了@aspnet/signalr-client包。在我的角度代码下面:

//My failing angular client
ngOnInit() {
    let connection = new HubConnection('http://localhost:8090/signalr/sensorhub');

    connection.on('addMessage', data => {
      console.log(data);
    });

    connection.start().then(() => console.log('started'));
}

一旦我越过connection.Start()行,我就会收到错误请求错误&#39;包含以下消息:协议错误:未知传输。

注意:我不使用.NET Core! 有任何想法吗?

2 个答案:

答案 0 :(得分:0)

似乎有角客户端说他没有在提供商网址上找到集线器。

尝试在api上映射信号器中心,就像那样......

Startup.cs

 app.UseSignalR(routes =>
 {
      routes.MapHub<SensorHub>("sensorhub");
 });

在客户端上,尝试从url路径中删除“SignalR”。我没有太多支持,但我总是使用基础uri。

ngOnInit() {
    let connection = new HubConnection('http://localhost:8090/sensorhub'); //without the path signalr

    connection.on('addMessage', data => {
      console.log(data);
    });

    connection.start().then(() => console.log('started'));
}

答案 1 :(得分:0)

我想问题来自@aspnet/signalr-client包是为ASP.NET Core构建的事实。

因此我最终使用另一个名为ngx-signalr-hubservice的纱线包。 它有很好的文档记录,并且(几乎)开箱即用。

请尝试:https://github.com/steveadoo32/ngx-signalr-hubservice