Ошибка при десериализации файла
Последние изменения: 2022-02-10
Ошибка:
При подключении ТСД к клиенту появляется следующая ошибка:
"Внутренняя ошибка открытия документа. Подробности смотрите в errors.log"
В логе присутствует следующая ошибка:
Ошибка при открытии документа
MESSAGE: Ошибка при десериализации файла 'ApplicationMobileSMARTSConfigurationCleverence.Warehouse.Environment.xml', смещение: 1865
Решение:
Данная ошибка означает, что на ТСД находится битый файл конфигурации. Скопируйте из папки «стандартная конфигурация» в папку «текущая конфигурация» согласно таблице (Папки и их содержимое) и перевыгрузите номенклатуру.
Ошибка при десериализации файла
Последние изменения: 10.02.2022
Ошибка:
При подключении ТСД к клиенту появляется следующая ошибка:
"Внутренняя ошибка открытия документа. Подробности смотрите в errors.log"
В логе присутствует следующая ошибка:
Ошибка при открытии документа
MESSAGE: Ошибка при десериализации файла 'ApplicationMobileSMARTSConfigurationCleverence.Warehouse.Environment.xml', смещение: 1865
Решение:
Данная ошибка означает, что на ТСД находится битый файл конфигурации. Скопируйте из папки «стандартная конфигурация» в папку «текущая конфигурация» согласно таблице (Папки и их содержимое) и перевыгрузите номенклатуру.
Клиент работает с двумя терминалами MC32N0. С одним проблем нет, на другом часто программа зависает, приходится перегружать. После перезагрузки документ не удается восстановить. Забрал терминал, загрузил последний ром от производителя, после этого установил Mobile Smarts, удалили не сервере всю номенклатуру и заново ее загрузили. Запустили «подбор заказа» несколько позиции отсканировались без проблем, потом он опять завис.
В логе ошибок следующие записи
MobileSMARTS.exe; Подбор заказа mainApp; 19/01/2018 11:56:44.779 ERROR
ADDITION TEXT: Подбор заказа: Действие (OperationAction) «1»
MESSAGE: Ошибка при десериализации файла ‘ApplicationMobileSMARTSDocumentsf24c4c21-98e0-4889-a826-ae04f9992c74Cleverence.Warehouse.Environment.xml’, смещение: 198513
TYPE: System.Runtime.Serialization.SerializationException
[STACK TRACE]
at Cleverence.DataCollection.Xml.XmlSerializer.DeserializeFilePartially(String path, Int64 offset)
at Cleverence.Warehouse.Operation._deserializeActionsInternal()
at Cleverence.Warehouse.Operation.DeserializeActions()
at Cleverence.Warehouse.Operation.get_Actions()
at Cleverence.Warehouse.Operation.Cleverence.Warehouse.IActivity.GetActionsForActivity(IActionWorkflow wf)
at Cleverence.Warehouse.Compact.OperationAction.get_Actions()
at Cleverence.Warehouse.Compact.OperationAction.Begin()
at Cleverence.Warehouse.Compact.ActionsApplication.StartApplication()
[STACK TRACE]
—INNER EXCEPTION—
MESSAGE: The process can not access the file ‘ApplicationMobileSMARTSDocumentsf24c4c21-98e0-4889-a826-ae04f9992c74Cleverence.Warehouse.Environment.xml’ because it is being used by another process.
TYPE: System.IO.IOException
[STACK TRACE]
at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync, String msgPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at Cleverence.DataCollection.Xml.XmlSerializer.DeserializeFilePartially(String path, Int64 offset)
at Cleverence.Warehouse.Operation._deserializeActionsInternal()
at Cleverence.Warehouse.Operation.DeserializeActions()
at Cleverence.Warehouse.Operation.get_Actions()
at Cleverence.Warehouse.Operation.Cleverence.Warehouse.IActivity.GetActionsForActivity(IActionWorkflow wf)
at Cleverence.Warehouse.Compact.OperationAction.get_Actions()
at Cleverence.Warehouse.Compact.OperationAction.Begin()
at Cleverence.Warehouse.Compact.ActionsApplication.StartApplication()
[STACK TRACE]
На другом терминале подобных проблем не возникает. Что можно сделать в данной ситуации
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||
1 |
||||
05.07.2011, 10:12. Показов 10112. Ответов 10 Метки нет (Все метки)
Есть программа — записная книжка, записи сериализуются в Xml. Если программа запускается первый раз и файла с сериализованными записями еще не созданно, то все работает хорошо, сериализуется.
0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 10:16 |
2 |
а что такое Dialer где он описан? 0 |
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||
05.07.2011, 10:26 [ТС] |
3 |
|||
Dialer это сриализуемая коллекция обьектов Entrie. Вот он:
0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 11:42 |
4 |
ну не знай может надо к аррей лист контент прибавит тэг [NonSerialized] и почему у вас аррей лист а там тип как бы неизвестен в аттрибутах указываете Ентри, можете попробовать сделать через List<type>. 0 |
Sanprof 96 / 96 / 16 Регистрация: 28.01.2008 Сообщений: 426 |
||||
05.07.2011, 11:46 |
5 |
|||
я уверен такое сообщение выдает когда сериализация прошла не до конца, тоесть часть свойств сериализовалась, потом возникла ошибка, и файл не дописался.
0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 11:53 |
6 |
Ну ты понаписал) испугал человека, тут дело не в коде сериализации мне кажется а в описании класса обьекта сериализации. 1 |
Sanprof 96 / 96 / 16 Регистрация: 28.01.2008 Сообщений: 426 |
||||
05.07.2011, 12:22 |
7 |
|||
тут дело не в коде сериализации мне кажется а в описании класса обьекта сериализации десериализация не может быть выполнена, если была выполнена не правильная сериализация.
1 |
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||||||
05.07.2011, 12:40 [ТС] |
8 |
|||||||
Нашел я ошибку у себя, все заработало. И сериализация у меня выполнена просто без лишних наворотов и правильно. Вместо:
Надо было:
Просто просмотрел. 0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 12:41 |
9 |
да да он прав чо то я упустил) 0 |
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||
05.07.2011, 13:21 [ТС] |
10 |
|||
Вопрос не по теме, касаемо моей программы. Как мне ArrayList отсортировать. Мне надо чтобы в DataGridView выводил в порядке возрастания даты. Свойва OrderBy() у нее нету. Подскажите плиз.
Сортировка нужна по en.Dt.ToShortDateString(). 0 |
96 / 96 / 16 Регистрация: 28.01.2008 Сообщений: 426 |
|
05.07.2011, 13:28 |
11 |
Filislav, почитайте про лямбда-выражения, в инете много ссылок как сортировать листы. 1 |
There is no problem with serialize but deserializing throw error like below. I shared all related classes and error. What should I do to deserialize this file.
yaml file (created by yaml serializing) :
Edits: 0:
Id: 20
Type: AddOrUpdate
Operation:
book:
ElementName: a
ArithmeticExpression: asd
ConditionExpression: a
c# classes :
public class DbContext
{
public Dictionary<int, DbModel> Edits { get; set; }
}
public class DbModel
{
public int Id { get; set; }
public string Type { get; set; }
public Dictionary<string, Operation> Operation { get; set; }
public DbModel(int id, string type, Dictionary<string, Operation> op)
{
Id = id;
Type = type;
Operation = op;
}
}
public class Operation
{
public string ElementName { get; set; }
public string ArithmeticExpression { get; set; }
public string ConditionExpression { get; set; }
public Operation(string elemName, string ArithmetticExp, string ConditionExp)
{
ElementName = elemName;
ArithmeticExpression = ArithmetticExp;
ConditionExpression = ConditionExp;
}
}
class DatabaseOperation
{
public static DbContext DbContext { get; set; }
public const string yamlEditString = "C:Datasetting.yml";
static DatabaseOperation()
{
DbContext = ReadAllDataFromFile().Result;
}
public static Task<DbContext> ReadAllDataFromFile()
{
DbContext dbCon = new DbContext();
if (File.Exists(yamlEditString))
{
var deserializer = new Deserializer();
string readedData = File.ReadAllText(yamlEditString);
//dbCon.Edits = deserializer.Deserialize<List<DbModel>>(readedData);
try
{
dbCon = deserializer.Deserialize<DbContext>(readedData);
}
catch (Exception ex)
{
throw;
}
}
else
{
dbCon.Edits = new Dictionary<int, DbModel>();
}
return Task.FromResult(dbCon);
}
public static Task WriteAllDataToFile(DbContext dbCon)
{
var serializer = new Serializer();
File.WriteAllText(yamlEditString, serializer.Serialize(dbCon));
}
}
getting this error :
(Line: 7, Col: 9, Idx: 86) — (Line: 7, Col: 9, Idx: 86): Exception during deserialization
«YamlDotNet»
inner exception :
Failed to create an instance of type ‘YamlEdit.Operation’.
at
YamlDotNet.Serialization.ObjectFactories.DefaultObjectFactory.Create(Type
type) at
YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser
parser, Type expectedType, Func`3 nestedObjectDeserializer, Object&
value) at
YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser
parser, Type expectedType, SerializerState state, IValueDeserializer
nestedObjectDeserializer)
StackTrace :
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.<>c__DisplayClass3_0.<DeserializeValue>b__0(IParser r, Type t)
at YamlDotNet.Serialization.NodeDeserializers.DictionaryNodeDeserializer.DeserializeHelper(Type tKey, Type tValue, IParser parser, Func`3 nestedObjectDeserializer, IDictionary result)
at YamlDotNet.Serialization.NodeDeserializers.DictionaryNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser parser, Type expectedType, Func`3 nestedObjectDeserializer, Object& value)
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.<>c__DisplayClass3_0.<DeserializeValue>b__0(IParser r, Type t)
at YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser parser, Type expectedType, Func`3 nestedObjectDeserializer, Object& value)
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.Deserializer.Deserialize(IParser parser, Type type)
at YamlDotNet.Serialization.Deserializer.Deserialize[T](String input)
at YamlEdit.DatabaseOperation.ReadAllDataFromFile() in D:RepositoriesYamlEditDatabaseOperation.cs:line 35
There is no problem with serialize but deserializing throw error like below. I shared all related classes and error. What should I do to deserialize this file.
yaml file (created by yaml serializing) :
Edits: 0:
Id: 20
Type: AddOrUpdate
Operation:
book:
ElementName: a
ArithmeticExpression: asd
ConditionExpression: a
c# classes :
public class DbContext
{
public Dictionary<int, DbModel> Edits { get; set; }
}
public class DbModel
{
public int Id { get; set; }
public string Type { get; set; }
public Dictionary<string, Operation> Operation { get; set; }
public DbModel(int id, string type, Dictionary<string, Operation> op)
{
Id = id;
Type = type;
Operation = op;
}
}
public class Operation
{
public string ElementName { get; set; }
public string ArithmeticExpression { get; set; }
public string ConditionExpression { get; set; }
public Operation(string elemName, string ArithmetticExp, string ConditionExp)
{
ElementName = elemName;
ArithmeticExpression = ArithmetticExp;
ConditionExpression = ConditionExp;
}
}
class DatabaseOperation
{
public static DbContext DbContext { get; set; }
public const string yamlEditString = "C:Datasetting.yml";
static DatabaseOperation()
{
DbContext = ReadAllDataFromFile().Result;
}
public static Task<DbContext> ReadAllDataFromFile()
{
DbContext dbCon = new DbContext();
if (File.Exists(yamlEditString))
{
var deserializer = new Deserializer();
string readedData = File.ReadAllText(yamlEditString);
//dbCon.Edits = deserializer.Deserialize<List<DbModel>>(readedData);
try
{
dbCon = deserializer.Deserialize<DbContext>(readedData);
}
catch (Exception ex)
{
throw;
}
}
else
{
dbCon.Edits = new Dictionary<int, DbModel>();
}
return Task.FromResult(dbCon);
}
public static Task WriteAllDataToFile(DbContext dbCon)
{
var serializer = new Serializer();
File.WriteAllText(yamlEditString, serializer.Serialize(dbCon));
}
}
getting this error :
(Line: 7, Col: 9, Idx: 86) — (Line: 7, Col: 9, Idx: 86): Exception during deserialization
«YamlDotNet»
inner exception :
Failed to create an instance of type ‘YamlEdit.Operation’.
at
YamlDotNet.Serialization.ObjectFactories.DefaultObjectFactory.Create(Type
type) at
YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser
parser, Type expectedType, Func`3 nestedObjectDeserializer, Object&
value) at
YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser
parser, Type expectedType, SerializerState state, IValueDeserializer
nestedObjectDeserializer)
StackTrace :
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.<>c__DisplayClass3_0.<DeserializeValue>b__0(IParser r, Type t)
at YamlDotNet.Serialization.NodeDeserializers.DictionaryNodeDeserializer.DeserializeHelper(Type tKey, Type tValue, IParser parser, Func`3 nestedObjectDeserializer, IDictionary result)
at YamlDotNet.Serialization.NodeDeserializers.DictionaryNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser parser, Type expectedType, Func`3 nestedObjectDeserializer, Object& value)
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.<>c__DisplayClass3_0.<DeserializeValue>b__0(IParser r, Type t)
at YamlDotNet.Serialization.NodeDeserializers.ObjectNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser parser, Type expectedType, Func`3 nestedObjectDeserializer, Object& value)
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer)
at YamlDotNet.Serialization.Deserializer.Deserialize(IParser parser, Type type)
at YamlDotNet.Serialization.Deserializer.Deserialize[T](String input)
at YamlEdit.DatabaseOperation.ReadAllDataFromFile() in D:RepositoriesYamlEditDatabaseOperation.cs:line 35
Я десериализирую следующий файл XML. Использование XML-сериализатора с VSTS 2008 + С# +.Net 3.5.
Вот файл XML.
<?xml version="1.0" encoding="utf-8"?>
<Person><Name>=b?olu</Name></Person>
Вот снимок экрана для отображения файла XML и двоичного формата файла XML,
Если есть какие-то решения принять таких персонажей, это будет здорово! Поскольку мой XML файл большой, и если такие символы действительно недопустимы и должны быть отфильтрованы, я хочу сохранить оставшееся содержимое XML файла после десериализации.
В настоящее время десериализация XML завершается с InvalidOperationException, и вся информация XML файла будет потеряна.
На самом деле, при открытии этого XML файла в VSTS возникает ошибка, подобная этой: ошибка 1 символа ‘?’, Шестнадцатеричное значение 0xffff недопустимо в документах XML. Я запутался, так как в двоичной форме нет значений 0xffff.
Любые решения или идеи?
EDIT1: вот мой код, который используется для десериализации файла XML,
static void Foo()
{
XmlSerializer s = new XmlSerializer(typeof(Person));
StreamReader file = new StreamReader("bug.xml");
s.Deserialize(file);
}
public class Person
{
public string Name;
}
Всем доброго времени суток, написал 2 метода 1-й сериализации, 2-й — десериализации, и при десериализации получаю следующие исключение:
Не удалось привести тип объекта «System.Int32» к типу
«binary.Classes.Serializ».
[Serializable]
class Serializ
{
public Int32 Line { get; set; }
BinaryFormatter formatter = new BinaryFormatter();
public void SerializSave (Int32 _line)
{
Line = _line;
using (FileStream fs = new FileStream(@"E:DELETEnr.dat", FileMode.Append))
{
formatter.Serialize(fs, Line);
Console.WriteLine("Объект сериализован");
}
}
public void SerializRead()
{
using (FileStream fs = new FileStream(@"E:DELETEnr.dat", FileMode.Open))
{
Serializ _serial = (Serializ)formatter.Deserialize(fs);
Console.WriteLine("Объект десериализован");
Console.WriteLine("Прочитано: {0}", _serial.Line);
}
}
}
Как исправить ошибку данного характера ? что я не так сделал ? спасибо
Спасибо за пример, но теперь я получаю такое исключение:
Additional information: Тип
«System.Runtime.Serialization.Formatters.Binary.BinaryFormatter» в
сборке «mscorlib, Version=4.0.0.0, Culture=neutral,
Пробовал и так FileMode.Append
и так FileMode.Create
Странно что на этот раз не так? и еще хотел спросить FileMode.Create
— даст мне дозапись данных в файл ? мне это важно. Спасибо
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||
1 |
||||
05.07.2011, 10:12. Показов 10186. Ответов 10 Метки нет (Все метки)
Есть программа — записная книжка, записи сериализуются в Xml. Если программа запускается первый раз и файла с сериализованными записями еще не созданно, то все работает хорошо, сериализуется.
0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 10:16 |
2 |
а что такое Dialer где он описан? 0 |
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||
05.07.2011, 10:26 [ТС] |
3 |
|||
Dialer это сриализуемая коллекция обьектов Entrie. Вот он:
0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 11:42 |
4 |
ну не знай может надо к аррей лист контент прибавит тэг [NonSerialized] и почему у вас аррей лист а там тип как бы неизвестен в аттрибутах указываете Ентри, можете попробовать сделать через List<type>. 0 |
Sanprof 96 / 96 / 16 Регистрация: 28.01.2008 Сообщений: 426 |
||||
05.07.2011, 11:46 |
5 |
|||
я уверен такое сообщение выдает когда сериализация прошла не до конца, тоесть часть свойств сериализовалась, потом возникла ошибка, и файл не дописался.
0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 11:53 |
6 |
Ну ты понаписал) испугал человека, тут дело не в коде сериализации мне кажется а в описании класса обьекта сериализации. 1 |
Sanprof 96 / 96 / 16 Регистрация: 28.01.2008 Сообщений: 426 |
||||
05.07.2011, 12:22 |
7 |
|||
тут дело не в коде сериализации мне кажется а в описании класса обьекта сериализации десериализация не может быть выполнена, если была выполнена не правильная сериализация.
1 |
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||||||
05.07.2011, 12:40 [ТС] |
8 |
|||||||
Нашел я ошибку у себя, все заработало. И сериализация у меня выполнена просто без лишних наворотов и правильно. Вместо:
Надо было:
Просто просмотрел. 0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 12:41 |
9 |
да да он прав чо то я упустил) 0 |
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||
05.07.2011, 13:21 [ТС] |
10 |
|||
Вопрос не по теме, касаемо моей программы. Как мне ArrayList отсортировать. Мне надо чтобы в DataGridView выводил в порядке возрастания даты. Свойва OrderBy() у нее нету. Подскажите плиз.
Сортировка нужна по en.Dt.ToShortDateString(). 0 |
96 / 96 / 16 Регистрация: 28.01.2008 Сообщений: 426 |
|
05.07.2011, 13:28 |
11 |
Filislav, почитайте про лямбда-выражения, в инете много ссылок как сортировать листы. 1 |
Ваш код, в том виде, в котором он приведен в вопросе, работает. В нем, правда, XML зачем-то прогоняется через XmlDocument
вместо прямой записи в файл, но на результат это не влияет. Т.е. код вида
SerializeObject(obj, @"some.xml");
DeSerializeObject<ArrayOfApiData>(@"some.xml");
возвращает копию оригинального объекта. Вот только XML при этом отличается от приведенного в примере. Он начинается с
<?xml version="1.0"?>
Т.е. тот XML, который у вас приведен — это не результат работы кода из вопроса. И он вполне может быть битым. Например, у него может быть неправильный BOM — первые байты файла, задающие формат. При несоответствии из кодировке, указанной в <?xml>
, чтение документа упадет именно с такой ошибкой.
Уберите лишний код из своего сериализатора и десериализатора, это скорее всего уберет ошибку:
var serializer = new XmlSerializer(serializableObject.GetType());
using (var stream = File.Create(fileName))
{
serializer.Serialize(stream, serializableObject);
}
var serializer = new XmlSerializer(typeof(T));
using (var stream = File.OpenRead(fileName))
{
return (T)serializer.Deserialize(stream);
}
My teacher provide me the serilaized file.. I have not created it my self .. while deserilaizing the file i get following error
java.io.InvalidClassException: netflix.memreader.FeatureWriter; local class incompatible: stream classdesc serialVersionUID = 3279065858639389501, local class serialVersionUID = -7190666486441488760
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at netflix.memreader.FeatureWriter.deserialize(FeatureWriter.java:327)
at netflix.memreader.MemReader.readFeaturesFromMem(MemReader.java:811)
at netflix.memreader.MemReader.main(MemReader.java:727)
Exception in thread "main" java.lang.NullPointerException
at netflix.memreader.MemReader.readFeaturesFromMem(MemReader.java:814)
at netflix.memreader.MemReader.main(MemReader.java:727)
PM 77-1
12.9k21 gold badges67 silver badges110 bronze badges
asked Oct 31, 2014 at 5:58
3
As the exception says ,
local class incompatible: stream classdesc serialVersionUID, local
class serialVersionUID
The serialized object has the different serialVersionUID
. when you are trying to de-serialize the object , the comipler will genrate the serialVersionUID
if you dont specify the default one.
serialVersionUID
may vary on same objects across different compilers (on various platforms). You may add the ,
private static final long serialVersionUID = -7190666486441488760;
answered Oct 31, 2014 at 6:09
SanthoshSanthosh
8,1813 gold badges29 silver badges56 bronze badges
1
Просмотр полной версии : Проблема с созданием экземпляра com-объекта на сервере
Добрый день,
AX2009 интегрирую с внешней системой.
Внешняя система предоставляет com-объект для манипуляций с ней,
в AX2009 запилил класс для запуска в пакетном режиме, который будет периодически обменивается данными с внешней системой посредством использования экземпляра данного com-объекта.
Для начала сделал по-старинке:
класс клиентский, пакетный сервер запускается в отдельной клиентской сессии.
Все работает.
Можно переводить и на серверный вариант, чтобы не париться с клиентской сессией.
Поставил RunOn = Server.
Метод new подпилил так:
void new()
{
InteropPermission p;
;
super();
p = new InteropPermission(InteropKind::ComInterop);
p.assert();
storageConnector = new COM(«Cleverence.Warehouse.StorageConnector»);
// storageConnector = new COM(«CDO.Message»); // для проверки создаются ли другие объекты
CodeAccessPermission::revertAssert();
}
Пробую. Получаю:
COM-объект класса «Cleverence.Warehouse.StorageConnector» не удалось создать. Убедитесь, что объект был должным образом зарегистрирован на компьютере «AOS-DEV-01V».
Убедился.
На указанном AOS установлен также и клиент. Открываю его.
Ставлю у класса RunOn = Client — запускается.
Ставлю у класса RunOn = Server — указанная выше ошибка.
Под доменным админом то же самое.
Другие объекты типа CDO.Message или ADODB.Recordset создаются нормально при любом значении RunOn.
Если кто в состоянии, подскажите, пожалуйста, в каком направлении копать.
Нужно искать 64-битный вариант COM-объекта «Cleverence.Warehouse.StorageConnector».
Либо АОС делать 32-битным.
Либо париться с клиентской сессией
Здесь прописано как запустить СОМ коннектор 1с8х в режиме 32 бит на 64-битовом сервере.
http://gilev.ru/1c/hasp/
в ссылке есть пункт
15. Для COM-соединений к 64х битному серверу приложений использование возможно только на том компьютере, на котором установлен ключ 64-разрядного сервера 1С:Предприятия (и не из терминальной сессии).
Для использования V81.COMConnector на компьютерах, которым доступны только клиентские ключи, можно зарегистрировать 32-разрядный V81.COMConnector в COM+.
— запустите Component Services;
— создайте пустое COM+ приложение с Activation type — Server application и именем, например, V81_COMConnector, укажите имя пользователя Windows, от имени которого компонента будет запускаться в адресном пространстве отдельного процесса dllhost.exe;
— в ветке Components добавьте новую компоненту comcntr.dll из каталога загрузочных модулей 1С:Предприятия.
В этом случае V81.COMConnector будет запускаться в отдельном 32-разрядном процессе и может использоваться как 32-разрядными, так и 64-разрядными приложениями.
Данная рекомендация была использована как для СОМ коннектора 1с (не было ключей 64-бит), так и еще для одной компоненты СОМ сторонней фирмы, под которую не было 64- битовой dll.
Пакеты ax2009 АОС 64-бит Window server 2008 sp2 работают с этими СОМ компонентами, проблем не было.
Всем привет.
Обновил версию 1с до 8.2., теперь интеграция с АХ 2009 SP1 накрылась медным тазом. Добавил новое приложение com+ (как в сообщении выше), загрузил компоненту из папки с установленным 1с8.2. Импорт поставщиков из 1С в АХ 2009 не работает: «COM-объект класса «V81.COMConnector» не удалось создать. Убедитесь, что объект был должным образом зарегистрирован на компьютере «AX-DEMO».» Зачем-то АХ 2009 упорно сигнализирует о том, что используется объект V81* которого уже впомине нет. В макросе используется следующее. Перепробывал все варианты.
//define.COMConnectorProgId(«V81.COMConnector») // исходник
//define.COMConnectorProgId(«V82.COMConnector») // второе чтение
define.COMConnectorProgId(«82.COMConnector.1») // по принципу названия компоненты в component services
В методе поиска/создания ком объекта, если последний не нашелся, указано:
comConnector = new COM( #COMConnectorProgId);//V81.COMConnector
Сервер перезагружал. АОС тоже. Поможите кто чем богат на знания.
Попробуйте для начала не использовать макрос, а явно указать строку «V82.COMConnector»
Всем привет!
Помогите пожалуйста решить подобную проблему. Создал на сервере (Windows Server 2008 R2 Standard SP1, 64bit) приложение COM+, как описано выше (от имени Network Service). Объект создается, но на методе Connect все намертво виснет (DAX 4.0):
c1COMObj = new COM(«V82.COMConnector»);
connection = c1COMObj.Connect(«Srvr=»» + c1Params.DBCluster + «»;Ref=»» + c1Params.DBClusterName + «»;Usr=»» + c1Params.User1C + «»;Pwd=»» + c1Params.User1CPassword + «»;»);
При этом для «V82.Application» все работает.
comcntr.dll нашел 2 штуки — в Program Files и в Program Files (x86). Пробовал подставлять обе, результат один. В чем может быть дело?
Основные моменты при создании приложений COM+:
1. Когда создаете приложение COM+, указывайте, что это серверное приложение;
2. Далее в мастере создания в окне «Удостоверение приложения» необходимо указать пользователя и пароль от имени которого стартует АОС;
3. Далее в мастере создания в окне «Добавление пользователей и ролей» также необходимо добавить пользователя от имени которого стартует АОС;
4. При создании конкретного компонента внутри приложения COM+ выбирайте библиотеку comcntr.dll из папки «Program Files (x86)».
Нижеприведенный код должен отрабатывать без проблем:
new InteropPermission(InteropKind::ComInterop).assert();
COMconnector = new COM(this.getCOMConnectorProg());
CodeAccessPermission::revertAssert();
где функция getCOMConnectorProg() имеет вид:
private str getCOMConnectorProg()
{
str getCOMConnectorProg;
;
switch(Version)
{
case ::V80 :
getCOMConnectorProg = #V80_COMConnector;
break;
case ::V81 :
getCOMConnectorProg = #V81_COMConnector;
break;
case ::V82 :
getCOMConnectorProg = #V82_COMConnector;
break;
default :
throw error(strFmt(«Для версии %1 не реализовано»,Version));
}
return getCOMConnectorProg;
}
макросы:
#define.V80_COMConnector(‘V8.COMConnector’)
#define.V81_COMConnector(‘V81.COMConnector’)
#define.V82_COMConnector(‘V82.COMConnector’)
Огромное спасибо! Заработало. Похоже ключевым был пользователь, от имени которого запускается АОС.
Еще раз всем привет!
К сожалению, проблема решена не полностью. При вызове любой функции 1С, например:
result = connection.axSyncClient(«Test»);
вылетает ошибка, в данном случае: «Метод «axSyncClient» в COM-объекте класса «<неизвестно>» возвратил код ошибки 0x80020009 (DISP_E_EXCEPTION), который означает: {ОбщийМодуль.ВнешниеПроцедуры.Модуль(340,4)}: Процедура или функция с указанным именем не определена (ВвестиЗначение).»
Такая функция в 1С точно есть, для «V82.Application» это работает. Подскажите пожалуйста, в чем может быть дело?
Еще раз всем привет!
К сожалению, проблема решена не полностью. При вызове любой функции 1С, например:
result = connection.axSyncClient(«Test»);
вылетает ошибка, в данном случае: «Метод «axSyncClient» в COM-объекте класса «<неизвестно>» возвратил код ошибки 0x80020009 (DISP_E_EXCEPTION), который означает: {ОбщийМодуль.ВнешниеПроцедуры.Модуль(340,4)}: Процедура или функция с указанным именем не определена (ВвестиЗначение).»
Такая функция в 1С точно есть, для «V82.Application» это работает. Подскажите пожалуйста, в чем может быть дело?
Не путайте COM и OLE.
В данном случае «V82.Application» — это OLE.
А функция «ВвестиЗначение» — функция клиентского исполнения, которая представляет собой показ диалога для ввода значение переданного типа и требует работы с интерфейсной составляющей платформы 1С. Через COM-объект («V82.COMConnector») она работать не будет.
Но там и не должно быть никакого диалога. Функция должна отработать без взаимодействия с пользователем и вернуть результат в виде текстовой строки. Может быть для работы через COMConnector функции в 1С должны быть написаны с учетом некоторых ограничений?
Функция «ВвестиЗначение» — это функция глобального контекста, т.е. функция ядра платформы 1С.
Вот ее описание из встроенной справки:
Вызывает диалог для ввода значения заданного типа. Если тип переменной не определен и <Тип> представляет собой составной тип данных, то в поле ввода появляется кнопка выбора типа.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
Обратите внимание на раздел «Доступность», среди перечисленного нет «Внешнее соединение», что требуется для работы с процедурами/функциями через COM-соединение.
Касательно вашего случая, возможно, что по бизнес логике функция «ВвестиЗначение» и не вызывается, может быть она даже используется в другой процедуре/функции общего модуля, не в той, которую вы пытаетесь вызвать через COM. Но при подключении через COM и вызове чего-либо из общего модуля, платформа проверяет этот модуль в режиме Внешнего соединения, для которого вызов этой функции недопустим, поэтому у вас и появляется указанная ошибка.
Найдите вот это место «ОбщийМодуль.ВнешниеПроцедуры.Модуль(340,4)» и логику работы функции ВвестиЗначение обрамите в директивы препроцессора:
#Если Клиент Тогда
#КонецЕсли
Я думаю, что проблема у вас пропадет, ну или наткнетесь на другое место неверного вызова функций контекста, не предназначенных для Внешнего соединения.
Спасибо большое! Получилось.
FYI
_________
COM-объект класса «V83.COMConnector.1» не удалось создать
Возможно после обновления 1С получили ошибку при запуске класса, выгружающего данные в 1С в пакетном режиме и запускающего функцию 1С посредством COM LoadData (возможно просто совпало), т.к. до этого момента выгрузка запускалась только вручную.
Вручную класс отрабатывал без ошибки.
Регистрация comcntr.dll в режиме 32 и 64 бит на 64-битовом сервере не помогла.
Помогло добавление пользователей aos-ов — пакетных серверов в роли компоненты приложения COM+
Работает на vBulletin® версия 3.8.5. Copyright ©2000-2023, Jelsoft Enterprises Ltd. Перевод: zCarot
Nervosa
26.07.13 — 17:04
Здравствуйте!
Взяли на тест сканер штрихкодов Motorola MC2100. Хочу написать обработку для выгрузки/загрузки данных из/в него. Смотрю в мануал от фирмы CleverenceSoft:
Функции драйвера объединены во внешней компоненте «Addin.Cl.TerminalConnector», содержащейся в библиотеке Cleverence.Warehouse.TerminalConnector.dll в подпапке ControlPanel папки установки драйвера.
Окей. Кладу Cleverence.Warehouse.TerminalConnector.dll в папку bin 1C-ки, а в обработке в методе ПриОткрытии() пишу:
Процедура ПриОткрытии()
Попытка
ПрогИД = «AddIn.Cl.TerminalConnector»;
ПодключитьВнешнююКомпоненту(ПрогИД);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
В итоге вижу ошибку — Ошибка при вызове метода контекста (ПодключитьВнешнююКомпоненту): Ошибка при подключении внешней компоненты
Что же я делаю неправильно?
Заранее спасибо.
Галахад
1 — 26.07.13 — 17:16
Может регистрировать надо?
Nervosa
2 — 26.07.13 — 17:24
И зарегить не даёт — говорит, что модуль Cleverence.Warehouse.TerminalConnector.dll загружен, но точка входа DllRegisterServer не найдена.
Grobik
3 — 26.07.13 — 17:26
Наверно нет прав на соответствующую ветку регистра винды.
Nervosa
4 — 26.07.13 — 17:32
Сделал себя админом — та же картина.
Grobik
5 — 26.07.13 — 17:40
Для начала винда?
Nervosa
6 — 26.07.13 — 17:43
7-ка.
Nervosa
7 — 29.07.13 — 09:13
И снова здравствуйте! Может на выходных кто-то занимался ТСД Motorola MC2100?
wowik
8 — 29.07.13 — 09:31
что разрабатываете, велосипед? с драйвером уже идут все необходимы обработки.
wowik
9 — 29.07.13 — 09:34
в папке драйвера «Control Panel» есть файл «Зарегистрировать COM.bat».
Nervosa
10 — 29.07.13 — 09:35
(8) — тут абсолютно полностью самописная конфигурация, поэтому стандартными обработками воспользоваться, увы, не удастся.
wowik
11 — 29.07.13 — 09:39
(10) тогда смотрим содержимое файла (9), запускаем регистрацию от имени администратора. Если не получилось, к администраторам, пусть разбираются с правами.
Nervosa
12 — 29.07.13 — 09:44
Ничего не помогло, к сожалению. По прежнему — Ошибка при подключении внешней компоненты. С правами всё в порядке на 100%.
wowik
13 — 29.07.13 — 09:48
напишите на суппорт support@cleverence.ru. Возможно, помогут. По крайней мере, попытаются.
Nervosa
14 — 31.07.13 — 09:17
По совету wowik я обратился в суппорт Cleverence и мне там действительно помогли
Последовательность действий следующая —
1) Устанавливаем выбранный драйвер — в моём случае этот — http://www.cleverence.ru//site.aspx?page=MobileSmarts-1C-Driver.
2) Из папки с установленным ПО Cleverence SoftDriver1CControl Panel запускаем Зарегистрировать COM.bat.
3) Затем в самой 1С 8.1 подключаем следующим образом:
Попытка
ПрогИД = «AddIn.Cl.TerminalConnector»;
ПодключитьВнешнююКомпоненту(ПрогИД);
Сканер = Новый (ПрогИД);
Исключение
Инфо = ИнформацияОбОшибке();
Сообщить(«Описание=’» + Инфо.Описание + «‘»);
КонецПопытки;
Всё работает!
Моя же ошибка заключалась в том, что я не просто запускал Зарегистрировать COM.bat, но и копировал Cleverence.Warehouse.TerminalConnector.dll в 1Сbin, чего делать не стоило.
В общем респект ребятам, они действительно помогли
0xFFFFFF
15 — 31.07.13 — 09:23
(0) «. Хочу написать обработку для выгрузки/загрузки данных из/в него»
И зачем вам такой геморрой… RDP и обработка в режиме рабочего стола снимает все вопросы.
wowik
16 — 31.07.13 — 09:54
wowik
17 — 31.07.13 — 09:55
(16) в комментариях обсуждение
Nervosa
18 — 31.07.13 — 10:11
(15) конфигурация 1С полностью самописная, обработка работает с остатками.
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||
1 |
||||
05.07.2011, 10:12. Показов 10267. Ответов 10 Метки нет (Все метки)
Есть программа — записная книжка, записи сериализуются в Xml. Если программа запускается первый раз и файла с сериализованными записями еще не созданно, то все работает хорошо, сериализуется.
0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 10:16 |
2 |
а что такое Dialer где он описан?
0 |
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||
05.07.2011, 10:26 [ТС] |
3 |
|||
Dialer это сриализуемая коллекция обьектов Entrie. Вот он:
0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 11:42 |
4 |
ну не знай может надо к аррей лист контент прибавит тэг [NonSerialized] и почему у вас аррей лист а там тип как бы неизвестен в аттрибутах указываете Ентри, можете попробовать сделать через List<type>.
0 |
Sanprof 96 / 96 / 16 Регистрация: 28.01.2008 Сообщений: 426 |
||||
05.07.2011, 11:46 |
5 |
|||
я уверен такое сообщение выдает когда сериализация прошла не до конца, тоесть часть свойств сериализовалась, потом возникла ошибка, и файл не дописался.
0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 11:53 |
6 |
Ну ты понаписал) испугал человека, тут дело не в коде сериализации мне кажется а в описании класса обьекта сериализации.
1 |
Sanprof 96 / 96 / 16 Регистрация: 28.01.2008 Сообщений: 426 |
||||
05.07.2011, 12:22 |
7 |
|||
тут дело не в коде сериализации мне кажется а в описании класса обьекта сериализации десериализация не может быть выполнена, если была выполнена не правильная сериализация.
1 |
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||||||
05.07.2011, 12:40 [ТС] |
8 |
|||||||
Нашел я ошибку у себя, все заработало. И сериализация у меня выполнена просто без лишних наворотов и правильно. Вместо:
Надо было:
Просто просмотрел.
0 |
Мохаммед Али 131 / 69 / 5 Регистрация: 14.08.2009 Сообщений: 916 |
|
05.07.2011, 12:41 |
9 |
да да он прав чо то я упустил)
0 |
Filislav 339 / 285 / 62 Регистрация: 02.09.2010 Сообщений: 547 |
||||
05.07.2011, 13:21 [ТС] |
10 |
|||
Вопрос не по теме, касаемо моей программы. Как мне ArrayList отсортировать. Мне надо чтобы в DataGridView выводил в порядке возрастания даты. Свойва OrderBy() у нее нету. Подскажите плиз.
Сортировка нужна по en.Dt.ToShortDateString().
0 |
96 / 96 / 16 Регистрация: 28.01.2008 Сообщений: 426 |
|
05.07.2011, 13:28 |
11 |
Filislav, почитайте про лямбда-выражения, в инете много ссылок как сортировать листы.
1 |
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account
Labels
bug
Something isn’t working
Ваш код, в том виде, в котором он приведен в вопросе, работает. В нем, правда, XML зачем-то прогоняется через XmlDocument
вместо прямой записи в файл, но на результат это не влияет. Т.е. код вида
SerializeObject(obj, @"some.xml");
DeSerializeObject<ArrayOfApiData>(@"some.xml");
возвращает копию оригинального объекта. Вот только XML при этом отличается от приведенного в примере. Он начинается с
<?xml version="1.0"?>
Т.е. тот XML, который у вас приведен — это не результат работы кода из вопроса. И он вполне может быть битым. Например, у него может быть неправильный BOM — первые байты файла, задающие формат. При несоответствии из кодировке, указанной в <?xml>
, чтение документа упадет именно с такой ошибкой.
Уберите лишний код из своего сериализатора и десериализатора, это скорее всего уберет ошибку:
var serializer = new XmlSerializer(serializableObject.GetType());
using (var stream = File.Create(fileName))
{
serializer.Serialize(stream, serializableObject);
}
var serializer = new XmlSerializer(typeof(T));
using (var stream = File.OpenRead(fileName))
{
return (T)serializer.Deserialize(stream);
}