Re: Странная проблема с бинарной сериализацией
От: Spiceman  
Дата: 02.04.08 15:46
Оценка: 1 (1)
Здравствуйте, ZeBeSt, Вы писали:

ZBS>"System.Runtime.Serialization.SerializationException

ZBS>Не удалось найти сборку "Cds.Service.Core, Version=0.1.3014.33731, Culture=neutral"

А версия сборки на клиенте точно 0.1.3014.33731?
Странная проблема с бинарной сериализацией
От: ZeBeSt Россия  
Дата: 02.04.08 15:22
Оценка:
Есть два приложения: клиент и сервер.
Для передачи данных между ними используется класс из общей сборки, класс отмечен как Serializable.
При передаче с клиента на сервер десериализация проходит нормально. А при десериализации на клиенте серверного ответа возникает ошибка:
"System.Runtime.Serialization.SerializationException
Не удалось найти сборку "Cds.Service.Core, Version=0.1.3014.33731, Culture=neutral"
И что самое непонятное: десериализация вызывается именно в этой сборке. Получается что сборка не может обнаружить сама себя.
Помогите плиз, уже второй день бьюсь над проблемой, а решить надо быстро.
Re: Странная проблема с бинарной сериализацией
От: desco США http://v2matveev.blogspot.com
Дата: 02.04.08 16:07
Оценка:
Здравствуйте, ZeBeSt, Вы писали:

ZBS>Есть два приложения: клиент и сервер.

ZBS>Для передачи данных между ними используется класс из общей сборки, класс отмечен как Serializable.
ZBS>При передаче с клиента на сервер десериализация проходит нормально. А при десериализации на клиенте серверного ответа возникает ошибка:
ZBS>"System.Runtime.Serialization.SerializationException
ZBS>Не удалось найти сборку "Cds.Service.Core, Version=0.1.3014.33731, Culture=neutral"
ZBS>И что самое непонятное: десериализация вызывается именно в этой сборке. Получается что сборка не может обнаружить сама себя.
ZBS>Помогите плиз, уже второй день бьюсь над проблемой, а решить надо быстро.

а эта сборка, случаем, грузиться не в LoadFrom контекст? если да, то поможет подписка на AppDomain.AssemblyResolve
Re: Странная проблема с бинарной сериализацией
От: Аноним  
Дата: 03.04.08 04:57
Оценка:
Здравствуйте, ZeBeSt, Вы писали:

ZBS>Есть два приложения: клиент и сервер.

ZBS>Для передачи данных между ними используется класс из общей сборки, класс отмечен как Serializable.
ZBS>При передаче с клиента на сервер десериализация проходит нормально. А при десериализации на клиенте серверного ответа возникает ошибка:
ZBS>"System.Runtime.Serialization.SerializationException
ZBS>Не удалось найти сборку "Cds.Service.Core, Version=0.1.3014.33731, Culture=neutral"
ZBS>И что самое непонятное: десериализация вызывается именно в этой сборке. Получается что сборка не может обнаружить сама себя.
ZBS>Помогите плиз, уже второй день бьюсь над проблемой, а решить надо быстро.

В общем ситуация оказалась еще запутанее!
Один и тот же объект не может десериализоваться сразу после сериализации в предыдущей строке. Вот кусок кода:

private bool Request(ServicePacket query, out ServicePacket answer)
{
 BinaryFormatter formatter = new BinaryFormatter();
 MemoryStream stream = new MemoryStream();
 formatter.Serialize(stream, query);
 stream.Position = 0;
 byte[] data = stream.ToArray();
 stream.Dispose();
 stream = new MemoryStream(data);
 ServicePacket srv = formatter.Deserialize(stream) as ServicePacket; - в этой строке возникает исключение
}

SerializaitionException — Не удалось найти сборку "Cds.Service.Core, Version=0.1.3015.17678, Culture=neutral, PublicKeyToken=null

Бред какой-то! Ничего не понимаю.
Господа, какие будут мысли?
Re[2]: Странная проблема с бинарной сериализацией
От: desco США http://v2matveev.blogspot.com
Дата: 03.04.08 06:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, ZeBeSt, Вы писали:


ZBS>>Есть два приложения: клиент и сервер.

ZBS>>Для передачи данных между ними используется класс из общей сборки, класс отмечен как Serializable.
ZBS>>При передаче с клиента на сервер десериализация проходит нормально. А при десериализации на клиенте серверного ответа возникает ошибка:
ZBS>>"System.Runtime.Serialization.SerializationException
ZBS>>Не удалось найти сборку "Cds.Service.Core, Version=0.1.3014.33731, Culture=neutral"
ZBS>>И что самое непонятное: десериализация вызывается именно в этой сборке. Получается что сборка не может обнаружить сама себя.
ZBS>>Помогите плиз, уже второй день бьюсь над проблемой, а решить надо быстро.

А>В общем ситуация оказалась еще запутанее!

А>Один и тот же объект не может десериализоваться сразу после сериализации в предыдущей строке. Вот кусок кода:

А>
А>private bool Request(ServicePacket query, out ServicePacket answer)
А>{
А> BinaryFormatter formatter = new BinaryFormatter();
А> MemoryStream stream = new MemoryStream();
А> formatter.Serialize(stream, query);
А> stream.Position = 0;
А> byte[] data = stream.ToArray();
А> stream.Dispose();
А> stream = new MemoryStream(data);
А> ServicePacket srv = formatter.Deserialize(stream) as ServicePacket; - в этой строке возникает исключение
А>}
А>

А>SerializaitionException — Не удалось найти сборку "Cds.Service.Core, Version=0.1.3015.17678, Culture=neutral, PublicKeyToken=null

А>Бред какой-то! Ничего не понимаю.

А>Господа, какие будут мысли?

задаю вопрос повторно, в какой контекст грузиться сборка Cds.Service.Core, Version=0.1.3015.17678, Culture=neutral, PublicKeyToken=null?
Re[2]: Странная проблема с бинарной сериализацией
От: Аноним  
Дата: 03.04.08 06:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Один и тот же объект не может десериализоваться сразу после сериализации в предыдущей строке. Вот кусок кода:


А ServicePacket или какой-нибудь из его членов не реализует ли кастомную сериализацию (ISerializable)?
Можно как-то на его код поглядеть?
Re[3]: Странная проблема с бинарной сериализацией
От: Аноним  
Дата: 03.04.08 06:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Один и тот же объект не может десериализоваться сразу после сериализации в предыдущей строке. Вот кусок кода:


А>А ServicePacket или какой-нибудь из его членов не реализует ли кастомную сериализацию (ISerializable)?

А>Можно как-то на его код поглядеть?

[Serializable]
public class ServicePacket
{
public DateTime PacketTime;
public string Command;
public byte[] Data;

public ServicePacket() { }

public ServicePacket(string command, byte[] data)
{
PacketTime = DateTime.Now;
Command = command;
Data = data;
}
}
Re[3]: Странная проблема с бинарной сериализацией
От: ZeBeSt Россия  
Дата: 03.04.08 07:06
Оценка:
D>задаю вопрос повторно, в какой контекст грузиться сборка Cds.Service.Core, Version=0.1.3015.17678, Culture=neutral, PublicKeyToken=null?

Сборка грузиться в основном домене приложения в качестве референции
Re[2]: Странная проблема с бинарной сериализацией
От: hard.disk  
Дата: 03.04.08 07:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, ZeBeSt, Вы писали:


А>
А>private bool Request(ServicePacket query, out ServicePacket answer)
А>{
А> BinaryFormatter formatter = new BinaryFormatter();
А> MemoryStream stream = new MemoryStream();
А> formatter.Serialize(stream, query);
А> stream.Position = 0;
А> byte[] data = stream.ToArray();
А> stream.Dispose();
А> stream = new MemoryStream(data);
// вставить сюда
А> ServicePacket srv = formatter.Deserialize(stream) as ServicePacket; - в этой строке возникает исключение
А>}
А>


А если перед десериализацией вставить строку Assembly.Load("полный путь к Cds.Service.Core")?
Re[3]: Странная проблема с бинарной сериализацией
От: ZeBeSt Россия  
Дата: 03.04.08 07:12
Оценка:
Здравствуйте, hard.disk, Вы писали:

HD>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, ZeBeSt, Вы писали:


А>>
А>>private bool Request(ServicePacket query, out ServicePacket answer)
А>>{
А>> BinaryFormatter formatter = new BinaryFormatter();
А>> MemoryStream stream = new MemoryStream();
А>> formatter.Serialize(stream, query);
А>> stream.Position = 0;
А>> byte[] data = stream.ToArray();
А>> stream.Dispose();
А>> stream = new MemoryStream(data);
HD>// вставить сюда
А>> ServicePacket srv = formatter.Deserialize(stream) as ServicePacket; - в этой строке возникает исключение
А>>}
А>>


HD>А если перед десериализацией вставить строку Assembly.Load("полный путь к Cds.Service.Core")?


Дело в том, что вышеприведенный код сам содержится в этой сборке
Re[4]: Странная проблема с бинарной сериализацией
От: hard.disk  
Дата: 03.04.08 07:32
Оценка:
Здравствуйте, ZeBeSt, Вы писали:

ZBS>Здравствуйте, hard.disk, Вы писали:


HD>>А если перед десериализацией вставить строку Assembly.Load("полный путь к Cds.Service.Core")?


ZBS>Дело в том, что вышеприведенный код сам содержится в этой сборке

Это я понял, а ты попробуй.
На форумах МСДНа был пост со схожей проблемой.
Re[5]: Странная проблема с бинарной сериализацией
От: ZeBeSt Россия  
Дата: 03.04.08 09:43
Оценка:
Здравствуйте, hard.disk, Вы писали:

HD>Здравствуйте, ZeBeSt, Вы писали:


ZBS>>Здравствуйте, hard.disk, Вы писали:


HD>>>А если перед десериализацией вставить строку Assembly.Load("полный путь к Cds.Service.Core")?


ZBS>>Дело в том, что вышеприведенный код сам содержится в этой сборке

HD>Это я понял, а ты попробуй.
HD>На форумах МСДНа был пост со схожей проблемой.

Проблема решена !!!.

Даю описание.
Разрабатываемый модуль для отладки запускается внешним приложением.
Причем приложение и модуль находятся в разных папках. Не буду вдаваться в объяснения, но надо именно так.
Вследствие этого видимо фреймворк не может самостоятельно разрулить ситуацию и ему приходится помогать.
Волшебная таблетка заключается в следующем:

в инициализации добавляем строки:

  AppDomain currentDomain = AppDomain.CurrentDomain;
  currentDomain.AssemblyResolve +=new ResolveEventHandler(CurrentDomain_AssemblyResolve);


И такой обработчик:

  private System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
  {
    System.Reflection.Assembly[] asms = AppDomain.CurrentDomain.GetAssemblies();
    for (int i = 0; i < asms.Length; ++i)
    {
      if (asms[i].FullName == args.Name)
      return asms[i];
    }
    return null;
  }


Все работает!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.