500 / signalr /协商Azure中已部署的应用程序

时间:2017-01-15 19:13:48

标签: azure signalr

部署到Azure SignalR时,dons工作在localhost上,但在部署到Azure时不起作用

在执行signalr / negotiate请求时,它会响应500内部服务器错误响应。

手动导航到协商网址,我得到了更详细的错误解释。
' CryptographicException:数据保护操作失败... '

使用IISExpress在本地工作正常。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

搞定了。我需要使用appBuilder。 SetDataProtectionProvider

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

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

                map.RunSignalR(hubConfiguration);
            });


        });

我使用 katana扩展方法将IAppBuilder桥接到IApplicationBuilder。 这允许您的owin中间件连接到asp.net核心。使用 RunSignalr 方法很重要。

内部类MachineKeyProtectionProvider:IDataProtectionProvider     {         public IDataProtector Create(params string []的用途)         {             返回新的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;
    }
}