Я работаю с угловым 5 приложением, которое я пытаюсь реализовать SignalR. И я получаю 2 ошибки, которые я себе представляю, это одно и то же. Первый это:
Не удалось загрузить ресурс: сервер ответил с состоянием 404 (не найдено)
и второй:
ОШИБКА Ошибка: SignalR: Ошибка загрузки концентраторов. Убедитесь, что ваша ссылка на концентраторы верна, например, .
Тем не менее, я исследовал это и увидел несколько вариантов, которые в основном ссылались на более старую версию siganalR.
Я следовал этому уроку и добавил концентратор
[HubName("EventContractHub")]
public class EventContractHub : Hub, IClientHub
{
public void SendId(int id)
{
Clients.All.Send(id);
}
}
с классом Startup.cs
, который выглядит как ...
[assembly:OwinStartUp(typeof(blah.Startup))]
namespace blah
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Other configuration here
app.MapSignalR();
}
}
}
И у My _Layout.cshtml
есть ссылка, которая выглядит следующим образом:
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.signalR-2.2.3.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="~/signalr/hubs"></script>
Кто-нибудь знает, почему это происходит прямо сейчас?
URL 404 не найден: http://localhost/IntelliM/signalr/hubs
Я должен упомянуть, что у меня на том же сервере работает API, использующий Owin. Я не знаю, изменит ли это что-нибудь. Если это так, я могу опубликовать конфигурацию для этого тоже.
Пожалуйста, поймите, что мне пришлось удалить часть кода здесь, я оставил соответствующий код:
public void Configuration(IAppBuilder app)
{
if (/*Logic for License*/)
{
app.Map("/identity", ssocf =>
{
});
}
JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies"
});
app.UseOpenIdConnectAuthenticationPatched(new OpenIdConnectAuthenticationOptions
{
SignInAsAuthenticationType = "Cookies",
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthorizationCodeReceived = async n =>
{
/*
* Add Clams here
*/
},
SecurityTokenValidated = async n =>
{
/*Create Token Here*/
},
RedirectToIdentityProvider = n =>
{
}
}
});
//Setting WebAPI Auth
var config = new HttpConfiguration();
config.Formatters.Remove(config.Formatters.XmlFormatter);
//config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = authority
});
app.UseWebApi(config);
app.MapSignalR();
}
}