繁体   English   中英

如何提取通过C#中的MSMQ从VB6发送的propertybag或复杂对象

[英]How to extract a propertybag or complex object send from VB6 through MSMQ in 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 \\ b \\ b휖ꭑ(\\ 0customer \\ 0Bob \\ 0 \\ b \\ aagent틠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();

你们有什么想法吗? 提前致谢

之前,我已经处理过这类问题,而我发现的最佳解决方案实际上是将对象序列化为XML-之后,使用哪种语言/平台以文本格式编码/解码该语言都无关紧要您将始终有选择。 在二进制格式中,您受即时格式化程序的支配,在整个平台(VB6 / C#)中不一定会以相同的方式工作。

参考: http : //www.codeproject.com/Articles/33296/Serialization-and-De-serialization

换句话说,您将需要在两个平台上都有一个标准的序列化器,而不必尝试序列化propertybag本身。

VB6属性袋以二进制格式存储数据。 您尝试读取文本格式的数据。 这就是整个问题。 无法识别的字符-是PropertyBag中数据的类型和大小。请尝试在两侧进行二进制形式的数据交换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM