2015-06-10 3 views
1

Я получаю InvalidCastException после того, как я перенес свое решение из VS2010 в VS2013.Невозможно наложить объект типа «System.Web.Hosting.SimpleWorkerRequest» на тип «System.Web.Hosting.IIS7WorkerRequest»

В VS2010 все работает отлично, и тот же код выдает следующую ошибку в VS2013:

Исключение типа «System.InvalidCastException» произошло в System.Web.dll, но не был обработан в пользовательском коде

Дополнительная информация: Не удается привести объект типа «System.Web.Hosting.SimpleWorkerRequest» ввести «System.Web.Hosting.IIS7WorkerRequest».

Я не знаю, что делать, не нашел ничего, связанного с Интернетом.

Ошибка возникает в строке 5 в следующем фрагменте кода:

public static void AuthenticateUser(String UserName, Int32 Minutes = 30, Boolean IsPersistent = true) 
    { 
     FormsAuthenticationTicket _ticket = new FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddMinutes(Minutes), IsPersistent, String.Empty); 
     FormsIdentity _id = new FormsIdentity(_ticket); 
     var _roles = Roles.GetRolesForUser(UserName); 
     HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(_id, _roles); 
    } 

ответ

2

Технически, это не ответ. Но это помогло мне исправить мою проблему. Поэтому я делюсь этим с вами всеми, надеюсь, это предотвратит некоторую головную боль для кого-то в ближайшем будущем.

В Visual Studio 2010 Professional я выполнял свой проект с использованием сервера разработки Visual Studio с использованием конкретного порта (4302).

В редакции Visual Studio 2013 Community я запускал свой проект на IIS Express. По какой-то причине я до сих пор не знаю, почему это заставило мое программное обеспечение сбрасывать «IIS7WorkerRequest» на объект SimpleWorkerRequest.

После того, как я перешел на локальный сервер IIS с пользовательским виртуальным каталогом, моя ошибка исчезла. Если есть кто-то, кто может это объяснить, я хотел бы знать, почему это происходит. Но на данный момент эта проблема была поставлена ​​выше.

1

Вы не можете вылитой из одного класса в другой родственный собрата; вы можете отбрасывать от родителя к ребенку или от ребенка к родительскому, но не между братьями и сестрами.

https://msdn.microsoft.com/en-us/library/ms173105.aspx

Так как SimpleWorkerRequest и IIS7WorkerRequest наследуют от HttpWorkerRequest, вы не можете бросить между ними. Сначала я спрошу себя, почему вы хотите или думаете, что вам нужно выполнить это преобразование, и если вы не можете найти альтернативу, тогда напишите метод преобразования для сопоставления между ними. Тем не менее, это, как правило, хороший знак того, что вы столкнулись с неправильным путем для своего кода.

+0

Ошибка возникает в фрагменте кода, где произнесение не выполняется мной. Я отредактировал свой вопрос. –

+0

Является ли AuthenticateUser определяемым пользователем методом? Попробуйте выйти из вызова Roles.GetRolesForUser, чтобы увидеть, действительно ли там происходит ошибка. Если да, то это происходит для всех пользователей или только одного? Основная проблема заключается в том, что что-то где-то пытается сделать это незаконное литье. Предположения, которые привели к этому незаконному акту, должны быть рассмотрены, прежде чем вы сможете его решить. – Marisa

+0

AuthenticateUser - это пользовательский метод. Я вырвал Roles.GetRolesForUser, и здесь произошла ошибка. –

Смежные вопросы