簡體   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