Ошибка сеанса: объект не установлен в экземпляр

На моей веб-странице я не могу получить переменную сеанса при публикации на удаленном сервере.

Проблема в

если страница не IsPostback, я могу получить переменную сеанса.

Но если постбэк страницы, то появляется ошибка.

Эта же ошибка возникает, когда я использую загрузку асинхронного файла. Я использую asynchfileupload для загрузки изображения и сохранения его в переменной сеанса. и позже при нажатии кнопки я сохраняю данные в каталог.

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

вот мой код

protected void AsynImageLoader_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
    if (AsynImageLoader.PostedFile != null)
    {
        string extension = System.IO.Path.GetExtension(AsynImageLoader.PostedFile.FileName);

        if (extension == ".jpg" || extension == ".gif" || extension == ".jpeg" || extension == ".png")
        {
            HttpPostedFile file = AsynImageLoader.PostedFile;
            Session["TempImage"] = ReadFile(file);
        }
    }
}

при нажатии кнопки

   var storedImage = Session["TempImage"] as byte[];
   String Strthumbpath = Server.MapPath("content\\thumbnail\\");
   if (storedImage != null)
   {
       System.Drawing.Image image = GetImage(storedImage);
       if (image != null)
       {
       image.Save(Strthumbpath + strFileName);
       }

       }

вставка значений в базу данных.

после долгих поисков я прочитал, что когда какие-либо файлы добавляются в любой подкаталог или редактируются в веб-конфигурации, это приводит к перезапуску приложения.

если да, то как я могу решить это..

заранее спасибо.


person Shyam s    schedule 02.05.2011    source источник
comment
Попробуйте передать его как скрытое значение формы вместо сеанса - не повезло?   -  person Shadow Wizard Wearing Mask V2    schedule 02.05.2011


Ответы (6)


Похоже, ваша переменная сеанса с именем «User_id» удаляется, когда вы отправляете ответ. Вы видите «Объект не установлен в экземпляр объекта», потому что вы пытаетесь выполнить метод «ToString ()» для нулевого объекта, что не разрешено.

Надеюсь это поможет.

person Karl Nicoll    schedule 02.05.2011
comment
да, вы правы. здесь я запутался, почему переменная сеанса user_id становится нулевой при обратной публикации и обновлении страницы. но при загрузке poage, если не ispostback, я получаю значение сеанса. - person Shyam s; 02.05.2011

Пожалуйста, предоставьте код, без него мы не сможем угадать проблему. Тем не менее, вы всегда можете выполнить нулевую проверку своей переменной сеанса перед ее использованием.

if(Session["User_id"]) != null;
person pramodtech    schedule 02.05.2011
comment
Я обновил свой вопрос с помощью кода. Можете ли вы проверить его? Заранее спасибо. - person Shyam s; 02.05.2011

Проверьте файл web.config на удаленном компьютере и убедитесь, что элемент sessionState настроен правильно. Возможно, на удаленном сервере для атрибута mode установлено значение Off.

Как указывали другие, вы могли бы кодировать более защитную проверку null перед доступом к свойствам объекта, который вы сохранили в сеансе.

person dariom    schedule 02.05.2011
comment
в моем файле webconfig сеанс указан как ‹sessionState mode=InProc›‹/sessionState› - person Shyam s; 02.05.2011
comment
Можете ли вы проверить, можете ли вы создать файл cookie при загрузке страницы, когда вы не выполняете обратную передачу, а затем попытаться прочитать значение файла cookie, когда страница отправляется обратно? Я думаю, что может возникнуть проблема с сохранением и получением файла cookie сеанса, используемого ASP.NET. Имя хоста в вашем URL-адресе случайно не содержит символ подчеркивания ('_')? - person dariom; 04.05.2011

Первая контрольная сессия.

if (Session["User_id"] == null)
{
//Put code here

}
else
{
     Response.Write(Session["User_id"]);

     // or you can write as below

     Response.Write(Convert.ToString(Session["User_id"]));
}

Никогда не используйте метод .ToString(), вы должны использовать Convert.ToString, это также нулевое значение обработки.

person Pankaj Agarwal    schedule 02.05.2011
comment
я сомневаюсь, почему переменная сеанса становится нулевой при обратной передаче и обновлении страницы. - person Shyam s; 02.05.2011

Событие нажатия кнопки происходит ПОСЛЕ события загрузки страницы... возможно, поэтому оно не установлено. ;-)

person Keith Bluestone    schedule 02.05.2011

вы должны проверить сеанс, если он нулевой или пустой, следующим образом:

 if (Session["User_id"] == null || Session["User_id"].ToString() == string.Empty)
 {
    Response.write(Session["User_id"].ToString());
 }
 else
 {
   // your code
 }
person Asfour    schedule 02.05.2011