Gon*_*ing 5 asp.net-mvc entity-framework connection-string azure owin
Google或SO上的任何内容都与此特定问题无关,因此请问一个新问题.我使用标准的用户安全选项创建了一个全新的Asp.Net MVC Web应用程序.我还在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>
Run Code Online (Sandbox Code Playgroud)
和默认的连接工厂:
<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>
Run Code Online (Sandbox Code Playgroud)
在尝试注册时(我希望它通常创建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(user,model.Password); 第156行:if(result.Succeeded)第157行:{
这与GZip有什么关系以及导致此错误的原因是什么?这已经阻止我让OWIN使用我的Azure数据库好几天了.
我遇到了类似的问题.
实体框架__MigrationHistory
Model
列包含GZip数据.如果此列中的数据已损坏,那么您的应用将无法解压缩数据,您将收到错误消息.
在我的情况下,通过尝试手动插入此功能发生了损坏.
我的解决方案:删除损坏的__MigrationHistory
行和相关的数据库更改,并允许应用程序正确迁移数据库.
这就是我的“理论”。我认为 Sql Azure Db 设置不正确或连接字符串错误。
我们知道,当 AspIdentity 尝试在登录时访问数据库并发现表未设置时,它将尝试创建它们。
我认为 AspIdentity 代码中存在一个故障/错误,在这种情况下,它会吞掉由错误连接字符串生成的异常,从而导致设置失败,并继续尝试向客户端提供身份验证票证。
如果我们查看Microsoft.Owin.Security.DataHandler.Serializer.TicketSerializer的代码,我们会发现一些 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();
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我认为 AspIdentity 在连接上失败,这个错误被吞没,Owin 管道继续处理请求,但当它遇到TicketSerializer
可能是空值或其他一些虚假值时,Gzip 会尝试压缩,然后 Boom!
随后出现奇怪的 YSOD 输出。
GZip 标头中的幻数不正确。确保您传递的是 GZip 流。描述:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。
AspIdentity 未正确短路此特定事件的 OWIN 请求处理。
可能完全是废话,但无论如何我都会把它扔掉。
归档时间: |
|
查看次数: |
4150 次 |
最近记录: |