2017-01-15 2 views
0

При развертывании в Azure SignalR doens't работа работает на локальном хосте, но не работает при развертывании на Azure500/signalr/переговоры для развертывания приложения в Azure

Он реагирует с ответом об ошибке 500 внутреннего сервера при выполнении signalr/запрос на переговоры.

Перемещение вручную к URL-адресу для переговоров, я получил более подробное объяснение ошибки.
'CryptographicException: операция защиты данных не удалась ...'

Все работает нормально локально, используя IISExpress.

Как исправить это?

ответ

-1

Got it working. Мне нужно было использовать appBuilder. SetDataProtectionProvider

app.UseAppBuilder(appBuilder => 
     { 
      appBuilder.SetDataProtectionProvider(new MachineKeyProtectionProvider()); 

      appBuilder.Map("/signalr", map => 
      { 
       var hubConfiguration = new HubConfiguration 
       { 
        EnableDetailedErrors = true 
       }; 

       map.RunSignalR(hubConfiguration); 
      }); 


     }); 

Я использую методы расширения катана для преодоления IAppBuilder к IApplicationBuilder. Это позволяет вашему промежуточному программному обеспечению owin подключаться к ядру asp.net. Важно использовать метод RunSignalr.

внутренний класс MachineKeyProtectionProvider: IDataProtectionProvider { общественного IDataProtector Создать (PARAMS строка [] цели) { возвращают новые MachineKeyDataProtector (цели); }}

internal class MachineKeyDataProtector : IDataProtector 
{ 
    private readonly string[] _purposes; 

    public MachineKeyDataProtector(string[] purposes) 
    { 
     _purposes = purposes; 
    } 

    public byte[] Protect(byte[] userData) 
    { 
     //return MachineKey.Protect(userData, _purposes); 
     return userData; 
    } 

    public byte[] Unprotect(byte[] protectedData) 
    { 
     //return System.Web.Security.MachineKey.Unprotect(protectedData, _purposes); 
     return protectedData; 
    } 
} 
+0

Это очень неуверенно. Вы можете прочитать, как защита данных используется для шифрования токена подключения здесь: https://www.asp.net/signalr/overview/security/introduction-to-security#connectiontoken. Я думаю, что вы можете отсутствовать, это машинный ключ. – Pawel

+0

@Pawel: Я согласен, что это небезопасно. Забыл сказать, что это решение действительно не подходит для производственных условий. –

0

Я думаю, что это решение. Это сработало для меня без внесения каких-либо изменений кода:

Azure WebApps настроен так, чтобы не загружать профиль пользователя по умолчанию, и это вызывает исключение. В настройках приложения Azure создайте настройку приложения, называемую WEBSITE_LOAD_USER_PROFILE, и установите ее в 1. Это приведет к загрузке профиля пользователя.

https://www.magnetismsolutions.com/blog/jaredjohnson/2015/12/18/resolving-cryptography-issues-with-the-dynamics-crm-sdk-in-azure-web-apps