我现在正在努力解决这个问题,我无法让它发挥作用 . 我有两个应用程序,都运行在带有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 回答
我实际上使用了错误的NuGet包 . 我想
Microsoft.AspNetCore.SignalR.Client
(注意名称中的AspNetCore
而不是AspNet
) . 虽然这些混合起来绝对容易 . 我使用的包是ASP.NET SignalR的客户端,我需要引用的是ASP.NET Core SignalR的客户端 .类似的软件包名称可能很容易在项目中滑动而不会注意到它 .