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

问题描述 投票:0回答:2

部署到Azure时,SignalR无法在localhost上运行,但在部署到Azure时不起作用

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

手动导航到协商网址,我得到了更详细的错误说明。 'CryptographicException:数据保护操作不成功......'

使用IISExpress,一切都在本地工作正常。

我该如何解决?

azure signalr
2个回答
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
投票

搞定了。我需要使用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 [] purpose){return new MachineKeyDataProtector(purpose); }}

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.