首页 文章

使用ASP.NET Core 2.1和UWP应用程序作为客户端的SignalR Webhost返回' 405 Method not allowed'

提问于
浏览
4

我现在正在努力解决这个问题,我无法让它发挥作用 . 我有两个应用程序,都运行在带有Win IoT的Raspberry Pi 2上:

  • ASP.NET Core 2.1 Web Api - 在此WebApi中,我正在运行SignalR主机(发布为win8-arm win10-arm ) .

  • 通用Windows应用程序 - 此应用程序将是一个客户端,应与主机和所有其他客户端(作为ARM发布)进行通信 .

当我将Web Api部署到Raspberry时,一切都很顺利 . 我有一个测试控制台应用程序充当客户端,可以与SignalR主机连接,没有任何问题 . 当我部署UWP应用程序并尝试运行它时,它会在HubConnection的 hubConn.Start(...) 方法中崩溃并返回错误:

HttpClientException:StatusCode:405,ReasonPhrase:'Method Not Allowed',Version:1.1,Content:System.Net.Http.StreamContent,Headers:{Server:Kestrel Date:Sat,02 Jun 201 17:04:15 GMT Content-长度:0内容类型:text / plain}

testconsole和UWP都使用 Microsoft.AspNet.SignalR.Client (2.2.3)nuget包(这是最新的) . ASP.NET Core 2.1 Web Api正在使用 Microsoft.AspNetCore.App SDK(2.1.0) .

通过阅读这篇文章SignalR version compatability (StatusCode: 405 'Method Not Allowed')我熟悉SignalR与主机作为客户端不向后兼容的事实 . 但是我希望当我使用最新的nuget软件包和nuget上可用的版本时,一切都会起作用 .

我还没有得到的是为什么测试控制台实际上能够连接没有错误但是UWP应用程序甚至不使用相同的SignalR Client nuget包 .

另外,我知道ASP.NET Core 2.1软件包和SignalR Client软件包是2个不同的软件包,但是我无法将nuget软件包 Microsoft.AspNetCore.App 添加到UWP项目中,因为它与任何 win10-arm 平台都不兼容 .

知道如何 Build 和运行连接吗?

Update the question June 4th, 2018

我在这个问题中删除了我之前的假设 . 我认为测试控制台应用程序已成功连接,但结果并非如此 . 不同之处在于Test Console尝试同步连接,但这导致了错误的吞没 . 我验证了SignalR主机的连接状态,从“连接”直接到“断开连接” .

问题仍然存在:如果我想使用ASP.NET Core 2.1 SignalR,我应该在我的测试控制台应用程序中包含哪个nuget包,以及我的UWP项目?

这里有一些代码;所有项目都是完全默认的文件 - 新项目,以及下面的代码 .

ASP.NET Core 2.1 Web Api

Startup.cs

public class Startup
{
    ...

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        ...

        services.AddMvc();
        services.AddSignalR();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

        ...

        app.UseSignalR(route =>
        {
            route.MapHub<HomeAutomationHost>("/HomeAutomationHost");
        });

        app.UseMvc();
    }
}

Universal Windows App

MainPage.xaml.cs中

public class MainPage 
{
    ...

    public async Task DoConnect()
    {
            var hubConn = new HubConnection("http://192.168.2.49:5000/HomeAutomationHost", false);
            hubConn.EnsureReconnecting();

            var signalRHost = hubConn.CreateHubProxy("HomeAutomationHost");

            await hubConn.Start(new WebSocketTransport());
    }
}

1 回答

  • 2

    我实际上使用了错误的NuGet包 . 我想 Microsoft.AspNetCore.SignalR.Client (注意名称中的 AspNetCore 而不是 AspNet ) . 虽然这些混合起来绝对容易 . 我使用的包是ASP.NET SignalR的客户端,我需要引用的是ASP.NET Core SignalR的客户端 .

    类似的软件包名称可能很容易在项目中滑动而不会注意到它 .

相关问题