2017-02-21 42 views
0

У меня есть приложение для чата, которое работает нормально локально, но SignalR удаляет внутреннюю ошибку сервера удаленно.SignalR Error 500 на сервере - asp.net

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

http://mydomainname.com/signalr/negotiate?clientProtocol=1.5&connectionData ...

Вот лог: enter image description here

Я посмотрел на другие ответы на аналогичную тему, но никто не похоже на работу для меня. Это ответы, на которые я ссылался: SignalR Negotiate 404, SignalR Negotiate 404 on Subdomain.

Вот код клиента:

$(function() { 
       // Reference the auto-generated proxy for the hub. 
       $.connection.hub.url = 'http://mydomainname.com/signalr'; 
       $.connection.hub.logging = true; 

       var chat = $.connection.chatHub; 

       var name = '<%= username%>' 
       // Create a function that the hub can call back to display messages. 
       chat.client.addNewMessageToPage = function (name, message) { 
        // Add the message to the page. 
        bootbox.alert({ 
         message: "<b>" + name + "</b>: " + message, 
        }); 
       }; 

       chat.client.sendMessage = function (name, message) { 
        // Add the message to the page. 
        $('#discussion').append('<li><strong>' + htmlEncode(name) 
         + '</strong>: ' + $('#message').val() + '</li>'); 
       }; 
       // Start the connection. 
       $.connection.hub.start().done(function() { 
        // code to append message omitted. 
       }); 
}); 

На навигации по ссылке ошибки я получаю Cryptographic исключение, как показано здесь: SignalR CryptographicException on AzureWebsites. Есть ли решение этой проблемы?

Я использую asp.net 4.5 и SignalR 2. Я пробовал много вещей, и я не уверен, почему существует внутренняя ошибка сервера. Любая помощь будет оценена.

+0

Вы должны показать сведения об исключении. 'Ошибка протокола: Неизвестный транспорт. 'Является нормальным, так как сервер ищет транспорт. Перейдите к: 'http: // mydomainname.com/signalr/negotiate', и вы должны получить 500. – Pawel

+0

@Pawel ah да извините, должно было включить это. Я получаю криптографическое исключение, как описано здесь: http://stackoverflow.com/questions/15393684/signalr-cryptographicexception-on-azurewebsites. Но не уверен в правильном решении в этом случае. – GenAsis

+0

У вас, вероятно, нет настроек machineKey. – Pawel

ответ

0

Как @Pawel сказал в комментарии выше, проблема была с http://mydomainname.com/signalr/negotiate, возвращающим ошибку 500: криптографическое исключение в этом случае.

мне удалось решить эту проблему путем добавления пакета Microsoft.AspNetCore.DataProtection.SystemWeb - как описано здесь: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/compatibility/replacing-machinekey