SignalR Webhost с ASP.NET Core 2.1 и приложением UWP, поскольку Клиент возвращает "Метод 405 не разрешен"
Я борюсь с этим некоторое время сейчас, и я не могу заставить его работать. У меня есть 2 приложения, оба работают на Raspberry Pi 2 с Win IoT:
ASP.NET Core 2.1 Web Api - в рамках этого WebApi я использую хост SignalR (опубликован как
win8-arm
win10-arm
).Универсальное приложение для Windows - это приложение будет клиентом, который должен взаимодействовать с хостом и всеми другими клиентами (публикуется как ARM).
Когда я развертываю Web Api на Raspberry, все хорошо. У меня есть тестовое консольное приложение, действующее как клиент, который может без проблем подключиться к хосту SignalR. Когда я развертываю приложение UWP и пытаюсь его запустить, оно вылетает в hubConn.Start(...)
метод HubConnection и возвращает ошибку:
HttpClientException: StatusCode: 405, ReasonPhrase: "Метод не разрешен", Версия: 1.1, Содержимое: System.Net.Http.StreamContent, Заголовки: {Сервер: Kestrel Дата: Сб, 02 июня 2018 17:04:15 GMT
Content-Length: 0 Content-Type: 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 (StatusCode: 405 "Метод не разрешен") знаком с тем фактом, что SignalR не имеет обратной совместимости для обоих хостов как клиентов. Но я ожидаю, что, поскольку я использую последние пакеты и версии nuget, доступные на nuget, все будет работать.
Чего я также не понимаю, так это того, почему Test Console действительно может подключаться без ошибок, но приложение UWP даже не использует тот же пакет Nuget Client SignalR Client.
Кроме того, я знаю, что пакет ASP.NET Core 2.1 и пакет клиента SignalR - это 2 разных пакета, но я не могу добавить пакет nuget Microsoft.AspNetCore.App
проекту UWP, так как он не совместим ни с каким win10-arm
Платформа.
Любая идея, как я могу получить соединение и работает?
Обновите вопрос 4 июня 2018 года
Я удалил свои предыдущие предположения в этом вопросе. Я думал, что приложение Test Console было успешно подключено, но оказалось, что это не так. Разница была в том, что Test Console пыталась подключиться синхронно, но это привело к проглатыванию ошибки. Я проверил состояние соединения с хостом SignalR, которое перешло от "Соединение" к "Отключено".
Вопрос все еще остается: если я хочу работать с ASP.NET Core 2.1 SignalR, какой пакет nuget я должен включить в свое приложение Test Console, а также в мой проект 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();
}
}
Универсальное приложение для Windows
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.
Подобные имена пакетов, которые могут очень легко появиться в проекте, не замечая этого.