部署到Azure SignalR时,dons工作在localhost上,但在部署到Azure时不起作用
在执行signalr / negotiate请求时,它会响应500内部服务器错误响应。
手动导航到协商网址,我得到了更详细的错误解释。
' CryptographicException:数据保护操作失败... '
使用IISExpress在本地工作正常。
我该如何解决这个问题?
答案 0 :(得分:0)
我认为这是解决方案。这对我有用而不做任何代码更改:
Azure WebApps配置为默认情况下不加载用户配置文件,这会导致异常。在Azure应用程序设置中,创建名为WEBSITE_LOAD_USER_PROFILE的应用程序设置并将其设置为1.这将加载用户配置文件。
答案 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;
}
}