Сериализация/десериализация, передача объектов по сети (C#)
От: sleepwalker Россия  
Дата: 13.01.06 04:16
Оценка:
Есть проблемка.
Если откинуть все детали, нада отобразить список файлов и директорий с удаленного компьютера. Там я запускаю виндовый сервис (мой), который по запросу шлет следующую структурку
[Serializable]
public class NetRequest
{
public Command command = Command.ChDir;
public ErrorCode retcode = ErrorCode.OK;
public string Path = ".";
public ArrayList Items = new ArrayList(); //здесь будет список FileInfo объектов
public NetRequest() 
{}
}

вот таким образом (rwstream это NetworkStream)
NetRequest answ = new NetRequest();
BinaryFormatter answFormatter = new BinaryFormatter();
answFormatter.Serialize(rwStream,answer);

В итоге клиент при получении делает так
BinaryFormatter outFormatter = new BinaryFormatter();
NetRequest answ = (NetRequest)outFormatter.Deserialize(rwStream);

Все, в приницпе, уже работает, за исключением того, что на принимающей стороне некоторые поля FileInfo объектов не корректны. Имя файла всегда верно. А вот, например, атрибуты — какая-то лабуда. Например файл может стать директорией. Время модификации от 1601 года и тд.

В чем здесь может быть причина? Это при том что, когда локально происходит коннект(localhost) т.е. и клиент и сервер на одной машине, все структуры выглядят как и должны.
Re: Сериализация/десериализация, передача объектов по сети (
От: Mab Россия http://shade.msu.ru/~mab
Дата: 13.01.06 06:12
Оценка:
Здравствуйте, sleepwalker, Вы писали:

Вот исходный код FileSystemInfo.GetObjectData (FileInfo наследует данный метод):
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
      new FileIOPermission(FileIOPermissionAccess.PathDiscovery, this.FullPath).Demand();
      info.AddValue("OriginalPath", this.OriginalPath, typeof(string));
      info.AddValue("FullPath", this.FullPath, typeof(string));
}

Делаем выводы
Re[2]: Сериализация/десериализация, передача объектов по сет
От: sleepwalker Россия  
Дата: 13.01.06 06:25
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Делаем выводы :)

Ээ, а можно попдоробнее для не особо понятливых. Я в NET пока не очень ((
Re[3]: Сериализация/десериализация, передача объектов по сет
От: Аноним  
Дата: 13.01.06 06:56
Оценка:
Здравствуйте, sleepwalker, Вы писали:

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


Mab>>Делаем выводы

S>Ээ, а можно попдоробнее для не особо понятливых. Я в NET пока не очень ((

сериализуются только значения свойствб OriginalPath и FullPath
Re[4]: Сериализация/десериализация, передача объектов по сет
От: sleepwalker Россия  
Дата: 13.01.06 07:02
Оценка:
А>сериализуются только значения свойствб OriginalPath и FullPath
А чем тогда объясняется, что на локальной машине все нормально?
Re[5]: Сериализация/десериализация, передача объектов по сет
От: Mab Россия http://shade.msu.ru/~mab
Дата: 13.01.06 07:53
Оценка:
Здравствуйте, sleepwalker, Вы писали:

S>А чем тогда объясняется, что на локальной машине все нормально?

В смысле на локальной машине?
Re[6]: Сериализация/десериализация, передача объектов по сет
От: sleepwalker Россия  
Дата: 13.01.06 08:01
Оценка:
S>>А чем тогда объясняется, что на локальной машине все нормально?
Mab>В смысле на локальной машине?
В прямом. Т.е. сервер запущен на машине и клиент. Connect(localhost). Все нормально работает. Если же сервер на удаленной машине то кирдык. Имена верные, атрибуты файлов скачут некоторые верные некоторые нет.
Re[7]: Сериализация/десериализация, передача объектов по сет
От: Mab Россия http://shade.msu.ru/~mab
Дата: 13.01.06 08:52
Оценка:
Здравствуйте, sleepwalker, Вы писали:

Атрибуты вычисляются путем обращения к файловой системе и передачи ей имени файла. На удаленной машине такого файла нет.
Re[8]: Сериализация/десериализация, передача объектов по сет
От: sleepwalker Россия  
Дата: 13.01.06 09:00
Оценка:
Mab>Атрибуты вычисляются путем обращения к файловой системе и передачи ей имени файла. На удаленной машине такого файла нет.
Тогда понятно. Спасиба ))

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