1

我们有一个实时运行的业务系统,有时会出现错误。该错误是根据来自 asp.net 成员资格提供程序的堆栈跟踪。哪个用户当前登录似乎并不重要。据我所知,数据库中的 asp.net 成员表很好。

生成错误的代码行示例:

if (Membership.GetUser() != null)

错误描述:

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() +141
System.Data.SqlClient.SqlDataReader.GetString(Int32 i) +96
System.Web.Security.SqlMembershipProvider.GetNullableString(SqlDataReader reader, Int32 col) +35
System.Web.Security.SqlMembershipProvider.GetUser(String username, Boolean userIsOnline) +1110
System.Web.Security.Membership.GetUser(String username, Boolean userIsOnline) +82
System.Web.Security.Membership.GetUser() +19

有谁知道出了什么问题?


更新:我们找不到此错误的解决方案。但最终它消失了。

现在,当我们迁移到另一台服务器时,这个错误完全削弱了我们的应用程序。我完全没有想法:(

4

1 回答 1

0

在 Membership.GetUser() 调用周围放置一个 try/catch 块并记录用户名。您可以通过调用 Membership.GetCurrentUserName() 来获取用户名。

一旦您有了一个导致问题的用户名,请查看 SQL 中的成员资格表并检查“评论”字段。我的猜测是评论字段中发生了一些有趣的事情——也许有一些奇怪的 unicode 字符遇到了问题,或者该字段中的数据太多,等等。

此外,尝试在会员数据库上为遇到问题的用户调用 dbo.aspnet_Membership_GetUserByName 并查看您得到的结果。

于 2012-02-09T05:39:51.757 回答