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 に答える