ProviderException: InvalidCastException

Лишь немногие из наших клиентов регулярно получают недопустимые исключения приведения, с вариациями, т.е. InvalidCastException/ ProviderException, но оба генерируют из вызова метода:System.Web.Security.SqlRoleProvider.GetRolesForUser(String username)

Другой вариант:

Тип исключения: InvalidCastException
Сообщение об исключении: Невозможно привести объект типа System.Int32к типу System.String.

Я посмотрел журнал событий приложения, который показывает:

Stack trace:
   at System.Web.Security.SqlRoleProvider.GetRolesForUser(String username)
   at System.Web.Security.RolePrincipal.IsInRole(String role)
   at System.Web.Configuration.AuthorizationRule.IsTheUserInAnyRole(StringCollection roles, IPrincipal principal)
   at System.Web.Configuration.AuthorizationRule.IsUserAllowed(IPrincipal user, String verb)
   at System.Web.Configuration.AuthorizationRuleCollection.IsUserAllowed(IPrincipal user, String verb)
   at System.Web.Security.UrlAuthorizationModule.OnEnter(Object source, EventArgs eventArgs)
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)*

Кто-нибудь сталкивался с этой проблемой, и если да, то что за исправление?

Спасибо

JS

13.10.2009 03:50:58
1 ОТВЕТ

В сообщении об ошибке сообщается, что вы пытаетесь привести (преобразовать чтение) из целочисленного типа к строковому типу и что приведение не было успешным. Это произошло в функции GetRolesForUser (String). Поэтому, возможно, вы передаете целое число вместо строки, и оно анализируется неправильно. В любом случае нам понадобится больше кода, чтобы быть уверенным. Надеюсь, это поможет.

Попробуйте убедиться, что всякий раз, когда вы даете целое число чему-то, что требует передачи строки, сначала вызывайте функцию toString (). Например:

GetRolesForUser(someInt32Var.toString())
0
20.10.2009 04:18:58
Shhnap, спасибо за ваш ответ, я бы хотел передать правильный параметр, но как видно из трассировки стека, это происходит из-за способа, которым asp .net обрабатывает членство внутри. Также интересно отметить, что эта ошибка происходит не так часто, возможно, один раз в день или несколько раз, это происходит при каждой попытке входа в систему. Трудно воспроизвести последовательно, что еще сложнее исправить. Предоставляя дополнительную информацию, это происходит при вызове этого метода Membership.GetUser (Login.UserName);
JS. 20.10.2009 11:53:17