Ошибка 500 в $ .connection.hub.start (). Done () - PullRequest
1 голос
/ 11 апреля 2019

Внутри моего существующего приложения запрос get на http://localhost:xxx/signalr/negotiate возвращает 500, о которых я не могу получить больше информации, чтобы найти действительную причину

Я попытался создать новый проект MVC инастройка SignalR - это работает.

Я попытался использовать примеры проектов и настроить для использования службы сигнализатора, и они тоже работают.

В диагностических инструментах и ​​на портале анализа приложений я могуБольше не вижу информации о причинах этой ошибки. 500

Кроме того, инструменты разработчика в chrome не дают мне больше информации

Она длинная, но лучшее, что я могу отследить - это журнал изIISExpress, у которого есть следующая ошибка, заставляющая меня думать, что это как-то связано с разрешениями / доступом, которые обеспечиваются моим приложением, но я застрял в том, с чего начать.

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
 <System>
  <Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
  <EventID>0</EventID>
  <Version>1</Version>
  <Level>3</Level>
  <Opcode>16</Opcode>
  <Keywords>0x100</Keywords>
  <TimeCreated SystemTime="2019-04-11T09:01:02.344Z"/>
  <Correlation ActivityID="{80000052-0004-FF00-B63F-84710C7967BB}"/>
  <Execution ProcessID="18156" ThreadID="13096"/>
  <Computer>DESKTOP-SQ9UCSB</Computer>
 </System>
 <EventData>
  <Data Name="ContextId">{80000052-0004-FF00-B63F-84710C7967BB}</Data>
  <Data Name="ModuleName">__DynamicModule_Microsoft.Owin.Host.SystemWeb.OwinHttpModule, Microsoft.Owin.Host.SystemWeb, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35_ed612830-d174-4c74-ba1f-93c69902f2c6</Data>
  <Data Name="Notification">4</Data>
  <Data Name="HttpStatus">500</Data>
  <Data Name="HttpReason">Internal Server Error</Data>
  <Data Name="HttpSubStatus">0</Data>
  <Data Name="ErrorCode">0</Data>
  <Data Name="ConfigExceptionInfo"></Data>
 </EventData>
 <RenderingInfo Culture="en-GB">
  <Opcode>MODULE_SET_RESPONSE_ERROR_STATUS</Opcode>
  <Keywords>
   <Keyword>RequestNotifications</Keyword>
  </Keywords>
  <freb:Description Data="Notification">AUTHORIZE_REQUEST</freb:Description>
  <freb:Description Data="ErrorCode">The operation completed successfully.
 (0x0)</freb:Description>
 </RenderingInfo>
 <ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
  <EventGuid>{002E91E3-E7AE-44AB-8E07-99230FFA6ADE}</EventGuid>
 </ExtendedTracingInfo>
</Event>

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

Спасибо, Том


Для справки, это код, который я использую

Концентратор - это баsic setup только с одной функцией

public void Send(string messageText)
{
    Clients.All.broadcastMessage(messageText);
}

В моем файле setup.cs я следовал базовой реализации, но добавил некоторую дополнительную отладку (не то чтобы это помогло!)

public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
            GlobalHost.HubPipeline.AddModule(new ErrorHandlingPipelineModule());
            app.MapAzureSignalR("/AzureSignalr", this.GetType().FullName, new HubConfiguration()
            {
                EnableDetailedErrors = true,
                EnableJSONP = true
            });
            GlobalHost.HubPipeline.RequireAuthentication();
        }

        private class ErrorHandlingPipelineModule : HubPipelineModule
        {
            protected override void OnIncomingError(ExceptionContext exceptionContext, IHubIncomingInvokerContext invokerContext)
            {
                throw exceptionContext.Error;
            }
        }

И наконец, в своем html-файле снова я следовал базовой реализации, но я также попытался явно установить URL-адрес и снова добавил дополнительные средства отладки.

<script src="/Scripts/jquery-3.3.1.js"></script>
    <script src="/Scripts/jquery.signalR-2.4.0.js"></script>
    <script src="/AzureSignalr/hubs"></script>
    <script type="text/javascript">
        $(function () {
            var messages = $.connection.myHub;

            messages.client.broadcastMessage = function (message) {
                alert(message);
            };

            $.connection.hub.url = 'http://localhost:57690/AzureSignalr';
            $.connection.hub.connectionSlow(function () {
                console.log('We are currently experiencing difficulties with the connection.')
            });
            $.connection.hub.error(function (error) {
                console.log('SignalR error: ' + error)
            });
            $.connection.hub.start().done();
        });
    </script>

1 Ответ

0 голосов
/ 11 апреля 2019

Мне удалось найти решения для этого сейчас, с кредитом на другой вопрос здесь; Сервисное соединение Azure SignalR не активно

Я изменил свой файл startup.cs следующим образом:

public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            app.MapAzureSignalR("/AzureSignalrPath", this.GetType().FullName, new HubConfiguration());
        }
    }

Важным фактором был протокол безопасности

...