AsyncFileUpload SerializationException - PullRequest
       8

AsyncFileUpload SerializationException

1 голос
/ 10 ноября 2009

Я использую элемент управления AsyncFileUpload для загрузки изображений. Он отлично работает с localhost, но когда я загрузил его на сервер, я получаю следующую ошибку.

Я даже не могу понять причину этой ошибки. Буду признателен за любой ответ.

Это метод, который я использую

protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
{
    string email = WriteYourEmailTXT.Text;
    var dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day).ToString("ddMMyyyy");
    string parentFolder = Server.MapPath("uploads");
    string childFolder = parentFolder + "\\" + email + "\\";
    if (!Directory.Exists(childFolder))
        Directory.CreateDirectory(childFolder);

    string counter = getCount();
    if (AsyncFileUpload1.HasFile) {
        string ext = getExtension(AsyncFileUpload1.FileName);
        string finalName = dt + "_" + counter + ext;
        string finalPath = childFolder + finalName;
        AsyncFileUpload1.SaveAs(finalPath);
        SetCount();
        SetFileName(finalName);
    }
}

protected void SetCount() 
{
    HttpCookie aCookie = Request.Cookies["CountPhoto"];
    int cookieNum = 0;
    if (aCookie != null)
        if (aCookie.Value != "")
            cookieNum = int.Parse(aCookie.Value.ToString());

    string newvalue = (cookieNum + 1).ToString();
    Response.Cookies["CountPhoto"].Value = newvalue;
}

protected void SetFileName(string fileName) 
{
    HttpCookie aCookie = Request.Cookies["FileName"];
    var filename = "";
    if (aCookie != null)
        if (aCookie.Value != "") {
            filename = aCookie.Value;
        }
    string newFileName = filename + "," + fileName;
    Response.Cookies["FileName"].Value = newFileName;
}

Error

Невозможно сериализовать состояние сеанса. В режимах «StateServer» и «SQLServer» ASP.NET будет сериализовать сеанс государственные объекты, и в результате несериализуемые объекты или Объекты MarshalByRef не являются разрешенный. Такое же ограничение применяется, если аналогичная сериализация сделано пользовательским хранилищем состояний сеанса в режиме «Пользовательский».

Трассировка стека: [SerializationException: Тип 'System.Web.HttpPostedFile' в Сборка 'System.Web, версия = 2.0.0.0, Culture = нейтрально, PublicKeyToken = b03f5f7f11d50a3a 'is не помечен как сериализуемый.]
System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers (RuntimeType тип) + 7733643
System.Runtime.Serialization.FormatterServices.GetSerializableMembers (Тип тип, контекст StreamingContext) + 258
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo () +111 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize (Object obj, ISurrogateSelector surrogateSelector, StreamingContext контекст, SerObjectInfoInit serObjectInfoInit, IFormatterConverter конвертер, ObjectWriter (ObjectWriter) +161 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize (Object obj, ISurrogateSelector surrogateSelector, StreamingContext контекст, SerObjectInfoInit serObjectInfoInit, IFormatterConverter конвертер, ObjectWriter (ObjectWriter) +51 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize (Object graph, Header [] inHeaders, __BinaryWriter serWriter, Boolean fCheck) + 410
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (Stream serializationStream, граф объектов, Заголовки [] заголовки, Boolean fCheck) +134 System.Web.Util.AltSerialization.WriteValueToStream (Объект значение, BinaryWriter Writer) + 1577

[HttpException (0x80004005): невозможно сериализовать состояние сеанса. В Режимы StateServer и SQLServer, ASP.NET будет сериализовать сеанс государственные объекты, и в результате несериализуемые объекты или Объекты MarshalByRef не являются разрешенный. Такое же ограничение применяется, если аналогичная сериализация сделано пользовательским хранилищем состояний сеанса в режиме «Пользовательский».]
System.Web.Util.AltSerialization.WriteValueToStream (Объект значение, BinaryWriter Writer) + 1662
System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert (Объект значение, BinaryWriter Writer) + 34
System.Web.SessionState.SessionStateItemCollection.Serialize (BinaryWriter писатель) + 606
System.Web.SessionState.SessionStateUtility.Serialize (SessionStateStoreData элемент, Поток потока) + 239
System.Web.SessionState.SessionStateUtility.SerializeStoreData (SessionStateStoreData item, Int32 initialStreamSize, Byte [] & buf, Int32 и длина) + 72
System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive (HttpContext контекст, строковый идентификатор, SessionStateStoreData item, Object lockId, Boolean newItem) + 87
System.Web.SessionState.SessionStateModule.OnReleaseState (Объект источник, EventArgs (eventArgs) + 560
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +68 System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, логическое и завершено синхронно) + 75

1 Ответ

1 голос
/ 10 ноября 2009

Проблема заключается в разнице конфигурации IIS между вашим локальным компьютером и веб-сервером.

Ваш сервер, по-видимому, настроен для обработки сеанса с помощью StateServer (еще один ПК для обработки большого количества пользовательских данных в памяти) или с помощью SQL Server (ваша база данных хранит пользовательские объекты в специальной таблице). Для передачи данных на сервер состояний или на сервер базы данных IIS будет сериализовать информацию о сеансе для передачи ее на другой сервер. По сути, это берет все детали для данного объекта и преобразует их в XML, чтобы объект мог быть «сохранен» и «загружен» в / из памяти по мере необходимости.

Конкретная проблема в этом случае заключается в том, что класс System.Web.HttpPostedFile не поддерживает сериализацию. Обычно эта проблема возникает с классами, написанными нашими собственными разработчиками, и мы можем просто добавить атрибут к классу, но здесь кажется, что проблема существует в классе, предоставляемом .NET Framework. Боюсь, вам нужно будет найти способ обойти эту проблему, например, написать собственный класс или не использовать его.

...