[英]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.