2010-08-16 2 views
2

Это мое первое сообщение здесь, так что не стесняйтесь меня :) У меня возникла странная проблема с ASP.Net-страницей. Я получаю сообщение об ошибке, не устанавливаемое при передаче строкового литерала переменной. Вот ошибка, которую я получаю.Ошибка присвоения строки ASP.Net

[NullReferenceException: Объект ссылка не указывает на экземпляр объекта .]
Project.Page.Page_Load (отправитель объекта, EventArgs е) в C: \ Проект \ Page.aspx.vb : 10
System.Web.UI.Control.OnLoad (EventArgs е): +91
System.Web.UI.Control.LoadRecursive() +74 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

И вот код, на который указывает ошибка. Последняя строка в этом фрагменте является строка 10 ошибка жалуется

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    Dim teststring As String 
    teststring = "test" 

Кажется, он не на доступ к любой ссылочный тип, даже если он объявлен локально в функции нагрузки. Первоначально я обнаружил проблему, когда Request.IsSecureConnection удалил меня. В конце концов я обнаружил, что могу заменить его на приведенный выше код и провалиться таким же образом.

Проблема не всегда происходит. Кажется, это вызвано публикацией обновления из Visual Studio или когда я отправляюсь домой на день, а сервер сидит без дела всю ночь. Кажется, что одна или две утилиты для пула приложений очищают его, и страница работает правильно.

Любая помощь была бы принята с благодарностью. Я занимаюсь разработкой настольных систем на несколько лет, но я довольно новичок в веб-разработке. Так что, возможно, это что-то очевидное, я настроен неправильно. Я в настоящее время использую .NET 4 на IIS 6.

UPDATE

я был в состоянии определить линию, используя рекомендации копирования страницы, комментируя все, а потом раскомментировать одну строку в то время, , Линия моя тестовая страница начал давать ошибку был это один

Dim StateName As String = State.Attribute (XName.Get ("имя")). Значение

Этот код находится в Еогеасп над IEnumerable (XElement). Трассировка стека по-прежнему указывает на назначение строки, но все остальные трассировки стека находятся на месте, поэтому я не думаю, что это плохой pdb.

Кроме того, когда на этот раз произошла ошибка, никакая переработка пула приложений или его остановка и запуск не устранили бы ошибку. Я, наконец, снова заработал, переключив приложение в другой пул приложений.

ответ

0

Я не вижу, как этот код может генерировать исключение для ссылки на null, вы уверены, что это не какой-то другой код, но сообщение об исключении указывает на неправильное место, потому что ваши файлы pdb устарели. Наиболее вероятным кандидатом на код, зависящий от вашего описания, является некоторый код доступа к переменной приложения, которая стала нулевой, потому что пул приложений переработал из-за таймаута или потому, что вы переиздали веб-приложение.

+0

Я согласен с тем, что этот код не должен иметь возможность указывать нулевую ссылку. Я проверил метки времени на своих pdb и dll, и они совпали; хотя, я не уверен, что это точный способ сказать, что они совпадают. – cduncan

+0

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

0

Попробуйте объявить строку как константу ... просто увеличить на выпуске

Dim Const TESTSTR as String = "test" 
Dim teststring As String 
teststring = TESTSTR 

Если это не сработает, переместите Const декларации где-то глобальное. Может быть, это как-то связано с тем, как/где .NET сохраняет строку сама по себе недействительной.

Попробуйте вручную переустанавливать страницу при каждом опубликовании ... возможно, это проблема скомпилированного кода после обновления? Я признаю, что это голова-скребок, такая линия никогда не должна терпеть неудачу.

+0

Я объявил это как локальную константу и сумел повторить ее. По-прежнему не удалось выполнить присвоение строки. – cduncan

+0

Глупый вопрос, но есть ли у вас все самые последние пакеты обновления/обновления .NET Framework? Я не знаю, что для .NET 4.0 еще есть, но большая часть кода по-прежнему зависит от классов среды 2.0/3.5. Нужно ли компилироваться с 4.0? Что произойдет, если вы нацелитесь на нижнюю структуру, например. 3,5? –

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