Asp.net mvc 为什么我会得到;GZip头中的幻数不正确。”;对Azure SQL使用OWIN身份验证时出错
谷歌上的任何东西都与这个特定的问题无关,所以提出一个新的问题。我用标准的用户安全选项创建了一个全新的Asp.NETMVCWeb应用程序。我还在Azure中创建了一个空数据库 我只将默认连接字符串更改为:Asp.net mvc 为什么我会得到;GZip头中的幻数不正确。”;对Azure SQL使用OWIN身份验证时出错,asp.net-mvc,entity-framework,azure,connection-string,owin,Asp.net Mvc,Entity Framework,Azure,Connection String,Owin,谷歌上的任何东西都与这个特定的问题无关,所以提出一个新的问题。我用标准的用户安全选项创建了一个全新的Asp.NETMVCWeb应用程序。我还在Azure中创建了一个空数据库 我只将默认连接字符串更改为: <connectionStrings> <add name="DefaultConnection" connectionString="data source=mydatabase.database.windows.net;initial cat
<connectionStrings>
<add name="DefaultConnection"
connectionString="data source=mydatabase.database.windows.net;initial catalog=Feedback;persist security info=True;user id=LeaveFeedbackuser;password=mypassword;MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient" />
</connectionStrings>
和此的默认连接工厂:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="v12.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
在尝试注册时(当我希望它正常创建AspNetUsers
和相关表时),我得到以下错误:
GZip头中的幻数不正确。确保你是
传入GZip流。描述:未处理的异常
在执行当前web请求期间发生。请
查看堆栈跟踪以了解有关错误和位置的更多信息
它起源于代码
异常详细信息:System.IO.InvalidDataException:幻数
GZip中的头不正确。确保您正在通过GZip
小溪
源错误:
第153行:{154行:var user=new
ApplicationUser{UserName=model.Email,Email=model.Email};行
155:var result=await UserManager.CreateAsync(用户,
型号.密码);第156行:如果(结果.成功)行
157:{
这与GZip有什么关系?是什么导致了这个错误?这已经让我无法使用Azure数据库好几天了。所以这是我的“理论”。我认为Sql Azure Db设置不正确或者连接字符串出错
我们知道,当AspIdentity尝试在登录时访问数据库,发现表未设置时,它将尝试创建它们
我认为AspIdentity代码中有一个故障/错误,在这种情况下,它会吞下由坏连接字符串生成的异常,从而导致安装失败,并继续以一种愉快的方式尝试向客户端提供身份验证票证
如果我们查看代码,我们会发现一些GZip操作:
public virtual byte[] Serialize(AuthenticationTicket model)
{
using (var memory = new MemoryStream())
{
using (var compression = new GZipStream(memory, CompressionLevel.Optimal))
{
using (var writer = new BinaryWriter(compression))
{
Write(writer, model);
}
}
return memory.ToArray();
}
}
所以基本上我认为AspIdentity在连接上失败了,这个错误被吞没了,Owin管道继续处理请求,但是当它点击TicketSerializer
时,可能会传递一个空值或一些其他伪值,Gzip试图压缩并发出隆隆声
接着是古怪的YSOD输出
GZip头中的幻数不正确。请确保正确
传入GZip流。说明:发生未处理的异常
在执行当前web请求期间。请查看
堆栈跟踪以获取有关错误及其位置的详细信息
源于代码
AspIdentity未正确短路此特定事件的OWIN请求处理
可能完全是胡说八道,但我还是要把它扔出去。我也遇到过类似的问题 实体框架
\uu MigrationHistory
模型
列包含Gzip压缩的数据。如果此列中的数据已损坏,则您的应用程序将无法解压缩数据,您将收到错误消息
在我的例子中,损坏是通过尝试手动插入此表中而发生的
我的解决方案:删除已损坏的
\uu MigrationHistory
行和相关的数据库更改,并允许应用程序正确迁移数据库。为清晰起见,请确定:1.数据库位于Azure上,但Web应用位于本地或Azure?2.您不会使用OWIN将Web应用程序连接到数据库,而是尝试使用AspIdentity,这是应用程序成员系统的OWIN中间件。3.您是否可以使用标准ADO.NET和您的连接字符串(例如在Home/Index操作中)对db运行完全独立于AspIdentity的创建表。即,确定这是否与AspIdentity有关,而不仅仅是Azure设置。这些线索允许我尝试许多不同的选项,现在可以使用了。我仍然不完全理解它出错的原因,但它似乎与数据库登录有关。感谢您的所有建议。:)有没有办法跟踪迁移表中的哪一行已损坏?@malik可能会尝试一次通过一次迁移进行更新请告诉我,看看您能找到哪一个。我现在在将新更改推送到生产环境时面临同样的问题。但是,我总是手动插入SQL脚本,而在本地我使用代码优先迁移。有什么建议吗?您是如何发现哪些行已损坏的