调用SqlMembershipProvider GetUser时出现无效转换异常

4
我正在使用ASP.NET SqlMembershipProvider在Web应用程序中实现授权,但在调用GetUser方法时,它会随机抛出无效的转换异常。
我可以成功登录并浏览页面,但在随机点上,它会崩溃并抛出异常。
Unable to cast object of type 'System.Int32' to type 'System.String'

从堆栈跟踪中可以清楚地看到它是由成员资格提供程序引起的:

[InvalidCastException: Unable to cast object of type 'System.Int32' to type 'System.String'.]
   System.Data.SqlClient.SqlBuffer.get_String() +5002910
   System.Data.SqlClient.SqlDataReader.GetString(Int32 i) +55
   System.Web.Security.SqlMembershipProvider.GetUser(String username, Boolean userIsOnline) +1169
   System.Web.Security.Membership.GetUser(String username, Boolean userIsOnline) +63
   System.Web.Security.Membership.GetUser() +19
   _Default.LoadLeadOverview() in \\file1\default.aspx.vb:169
   _Default.Page_Load(Object sender, EventArgs e) in \\file1\default.aspx.vb:30
   System.Web.UI.Control.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +74
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

我已经查看了一些相关的信息,发现其他人也遇到了同样的问题,但是没有解决方案。欢迎提出任何想法。

2个回答

1

虽然我没有采取任何特别的措施来解决这个问题,但已经有几周没遇到了。回想一下,当时我同时在多个浏览器中使用相同的账户进行网站测试,频繁登录和注销,似乎就是出现问题的原因。现在所有的CSS和其他跨浏览器的东西都已经解决,我不再频繁地使用多个浏览器,也不会同时打开,所以这个问题看起来已经解决了。


0

你的用户中是否有一些人使用全数字作为用户名?这可能是由于自动输入在某个地方出现了错误。


不,我目前只有两个用户帐户用于测试/开发,它们都只是由字母和下划线组成的 alpha 字符。 - Ira Rainey
当我从default.aspx中删除所有代码时,我遇到了同样的问题。这似乎是由成员资格提供程序引起的,这有点令人担忧。问题在于它似乎是随机和不一致的,这使得很难确定原因。我所知道的是唯一一致的因素是异常似乎是由成员资格提供程序本身抛出的。 - Ira Rainey
@Ira - 这不是你的堆栈跟踪所显示的。请显示发送到数据库服务器的SQL或服务器上SP的内容。 - Hogan
不,你说得对,那个堆栈跟踪是从一个有代码的页面中获取的。但是,我后来尝试将代码删除,但仍然出现了同样的问题。这是在从web.config文件中定义的登录页面重定向之后发生的,该文件将身份验证模式定义为mode="Forms"并使用<deny users="?"/>限制对所有其他页面的访问。我已经几天没有看到这个异常了,但如果再次出现,我会发布SQL。感谢您的帮助。 - Ira Rainey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接