0

我是 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\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();

你们知道怎么做吗?先谢谢了

4

2 回答 2

1

我之前已经处理过这类问题,我发现的最佳解决方案实际上是将对象序列化为 XML - 之后,您使用什么语言/平台来编码/解码文本格式的语言并不重要你将永远有选择。在二进制格式中,您受即时格式化程序的摆布,它不一定在平台上以相同的方式工作(VB6/C#)。

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

换句话说,您需要有一个跨平台的标准序列化程序,而不是尝试序列化属性包本身。

于 2014-06-26T14:30:35.923 回答
0

VB6 属性包以二进制格式存储数据。您尝试以文本格式读取数据。这就是整个问题。Unrecognized characters - 是PropertyBag中数据的一种类型和一种大小。尽量让双方以二进制形式交换数据。

于 2014-06-25T12:19:16.490 回答