Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 为什么我会得到;GZip头中的幻数不正确。”;对Azure SQL使用OWIN身份验证时出错_Asp.net Mvc_Entity Framework_Azure_Connection String_Owin - Fatal编程技术网

Asp.net mvc 为什么我会得到;GZip头中的幻数不正确。”;对Azure SQL使用OWIN身份验证时出错

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

谷歌上的任何东西都与这个特定的问题无关,所以提出一个新的问题。我用标准的用户安全选项创建了一个全新的Asp.NETMVCWeb应用程序。我还在Azure中创建了一个空数据库

我只将默认连接字符串更改为:

  <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脚本,而在本地我使用代码优先迁移。有什么建议吗?您是如何发现哪些行已损坏的