Как извлечь пакет свойств или сложный объект отправить из VB6 через MSMQ в C#

Я новичок в VB6, а также MSMQ. Я прошел много уроков онлайн, но, похоже, нет решения для моего вопроса.

Мне удалось отправить из C# в C# или VB6 в VB6, но не из VB6 в C# или наоборот. Так что мне интересно, есть ли способ сделать это или нет такого способа общения?

Например: я хочу отправить это в MSMQ

Dim PropBag As PropertyBag
 Set PropBag = New PropertyBag
 PropBag.WriteProperty "Customer", "Bob"
 PropBag.WriteProperty "Product", "MoeHairSuit"
 PropBag.WriteProperty "Quantity", 4

и получить детали в C#, есть "Недопустимый символ в данной кодировке. Строка 1, позиция 1". ошибка при использовании XmlMessageFormatter

Message mes = mq.Receive(new TimeSpan(0, 0, 3));
mes.Formatter = new XmlMessageFormatter(new String[] { "System.String,mscorlib" });
result = mes.Body.ToString();

Я также пытался читать из потока, но в моей строке появился странный символ. Ниже приведен код, и это вывод "0 \0\0\b\b휖ꭑ(\0customer\0Bob\0\b\a 틠 \ 4\0product\v\0MoeHairSuit\b 調 ⫳ᄂ.quantity\0"

Message mes;
mes = mq.Receive(new TimeSpan(0, 0, 3));
mes.BodyStream.Position = 0;
byte[] b = new byte[mes.BodyStream.Length];
mes.BodyStream.Read(b, 0, (int)mes.BodyStream.Length);
UnicodeEncoding uniCoder = new UnicodeEncoding();
result = uniCoder.GetString(b);

Я получаю это исключение: "Невозможно десериализовать сообщение, переданное в качестве аргумента. Невозможно распознать формат сериализации". при использовании ActiveXMessageFormatter, как показано ниже

mes = mq.Receive(new TimeSpan(0, 0, 3));
mes.Formatter = new ActiveXMessageFormatter();
result = mes.Body.ToString();

Ребята, вы знаете, как это сделать? Заранее спасибо

2 ответа

Решение

Я уже имел дело с этим типом проблемы раньше, и лучшее решение, которое я нашел, - это на самом деле сериализовать объект в XML - после этого не имеет значения, какой язык / платформу вы используете для кодирования / декодирования языка, как в текстовом формате. у вас всегда будут варианты. В двоичном формате вы находитесь в зависимости от непосредственного средства форматирования, которое не обязательно будет работать одинаково на разных платформах (VB6/C#).

Ссылка: http://www.codeproject.com/Articles/33296/Serialization-and-De-serialization

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

Пакет свойств VB6 хранит данные в двоичном формате. И вы пытаетесь прочитать данные в текстовом формате. Вот и вся проблема. Нераспознанные символы - это тип и размер данных в PropertyBag. Попробуйте произвести обмен данными в двоичном виде с обеих сторон.

Другие вопросы по тегам