SignalR: Ошибка загрузки концентраторов. 404 Не Найдено - PullRequest
0 голосов
/ 28 июня 2018

Я работаю с угловым 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();
    }

}

1 Ответ

0 голосов
/ 02 июля 2018

Проверка заметок из связанного урока

Важно

При добавлении SignalR и других библиотек сценариев в проект Visual Studio диспетчер пакетов может установить версию файла сценария SignalR, более позднюю, чем версия, показанная в этом разделе. Убедитесь, что ссылка на скрипт в вашем коде соответствует версии библиотеки скриптов, установленной в вашем проекте.

Поэтому сначала убедитесь, что у вас есть правильные версии, на которые ссылаются.

Рассмотрите возможность добавления соответствующих ссылок SignalR в комплект

public class BundleConfig {
    public static void RegisterBundles(BundleCollection bundles) {
        //... other bundles

        bundles.Add(new ScriptBundle("~/bundles/jquery")
            .Include("~/Scripts/jquery-{version}.js"));        

        bundles.Add(new ScriptBundle("~/bundles/signalr").Include(
            "~/Scripts/jquery.signalr-*", //the * wildcard will get script regardless of version
            "~/signalr/hubs"));

        //Enable minification
        BundleTable.EnableOptimizations = true;
    }
}

//...in start up
BundleConfig.RegisterBundles(BundleTable.Bundles);

и в представлении

<!-- javascript: Placed at the end of the document so the pages load faster -->
@Scripts.Render("~/bundles/jquery", "~/bundles/signalr")

С точки зрения маршрутизации вы также должны быть уверены, что при добавлении в смешанный проект других конфликтующих маршрутов не существует, так как порядок его добавления в конвейер промежуточного программного обеспечения может повлиять на маршрутизацию к концентратору.

Например

public void Configuration(IAppBuilder app) {
    //Auth
    this.ConfigureAuth(app);

    //SignalR 
    app.MapSignalR();

    //...other configuration.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...