2013-05-31 3 views
2

Правильно, поэтому я видел множество вопросов об этом, но ни одна из предлагаемых исправлений не работала для меня.Signalr Hubs Не найдено (403)

У меня есть проект MVC4, работающий в Visual Studio 2012/IIS Express, с помощью SignalR, чтобы сделать некоторые отзывы для пользователей. Когда я запускаю проект, я получаю ошибку 403 в Chrome, как, например:

Failed to load resource: the server responded with a status of 403 (Forbidden) http://{website}/Hubs/ 


Uncaught Error: SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/hubs'></script>. 

Очевидно, я изменил фактический домен на моей машине {сайт}

Теперь, первоначально я был в папке называемый signalr в корне моего веб-проекта с подпапкой концентраторов, но затем я прочитал в SignalR GitHub, что вы не должны этого делать, поэтому я изменил его на «Hubs». Все еще не исправить.

Я также видел исправление относительно размещения вашего RouteTable.Routes.MapHubs(); в правильном порядке. Шахта выглядит следующим образом:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RouteTable.Routes.MapHubs(); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 

Я также видел некоторых людей, предполагающие прохождение в маршруте в качестве параметра в MapHubs() метод, но который принимает строку и объект HubConfiguration в качестве параметра, так что это не работает или.

мой взгляд код выглядит следующим образом:

@using(Html.BeginForm("Report", "Home", FormMethod.Post, new { enctype="multipart/form-data" })) 
{ 
    @Html.ValidationSummary(true); 
    <div> 
     @(InputExtensions.Hidden(Html, "submittingUserId", ViewBag.CurrentUser)) 
     @(InputExtensions.Hidden(Html, "signalConnectionId")) 
     <br /> 
     @Html.EditorFor(model => model.UploadedFile) 
     @Html.ValidationMessageFor(model => model.UploadedFile) 
    </div> 
    <div> 
     <input id="subButton" type="submit" value="UploadFile" title="Upload File" /> 
    </div> 
} 

@section Scripts { 
    @Scripts.Render("~/Scripts/jquery.signalR-1.1.1.min.js") 
    @Scripts.Render("~/Hubs") 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      var accountMovementMoveHub = $.connection.accountMovementHub; 
      $("#signalConnectionId").val($.connection.connectionId); 

      $.connection.hub.updateProgress = function (message) { 
       $("#progress-list").append('<li>' + message + '</li>'); 

      }; 

      $.connection.hub.start(); 
     }); 
    </script> 

} 

Я также добавил эти элементы в web.config:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true"> 
    </modules> 
</system.webServer> 

Это сводит меня с ума абсолютно, я пробовал абсолютно каждое предложение, которое я мог бы найти здесь, github и где-нибудь еще в этом отношении :(

Любая помощь была бы принята с благодарностью!

Благодаря

ОТВЕТ

Так что получается, я предположил, что ссылка на скрипт/signalr/концентраторы был ФИЗИЧЕСКОЙ папку, содержащую ступицу. Который это не так; это ссылка на виртуальный каталог, поэтому, если у вас ТАКЖЕ есть физическая папка SignalR, она запутывается. Я переместил папку хабов в свой бизнес-проект и вернул ссылку на сценарий «/ signalr/hubs», и все это начало работать.

Извините за глупый вопрос и спасибо за ответы.

+0

Похоже, у вас есть косые черты ??? http: // {website}/Hubs/ – Steve

+0

Я думаю, что это просто консоль Chrome, добавляющая эту последнюю косую черту. Ошибка возникает из ссылки на сценарий в представлении, который ссылается на «~/Hubs» – JustinMoser

+0

Вы просмотрели источник и подтвердили это? Просто мысль. – Steve

ответ

3

RouteTable.Routes.MapHubs(); сопоставляет ваши хабы по адресу http: // {website}/signalr/hubs

Почему вы пытаетесь получить хабы из http: // {website}/Hubs? Просто доступ к обоим путям из браузеров, вам нужно получить ответ HTTP, содержащий много кода javascript. Если это не работает, значит, ваше приложение не настроено правильно.

Следуйте за этим tutorial, вы можете увидеть заказ RouteTable.Routes.MapHubs() отличается от того, что ваш есть

0

Следуя вдохновению выше, я обновил свой WebConfig, чтобы выглядеть следующим образом:

сценарий SRC =»<%: ResolveClientUrl ("~/signalr/концентраторы")% > '

вместо

сценарий SRC =' <%: ResolveClientUrl ("~/концентраторы")%>»тип = "текст/JavaScript"

Не знаете, почему, поскольку структура папок является только ~/Hubs относительно страницы, но она работает так ... ZANG !!!!