SetBytesProperty
/GetBytesProperty
메소드 쌍이 MQMessage
클래스에 있습니다. (WebSphere MQ Client 7.0.1.6을 사용하고 있습니다). 성공적으로 대기열에 속성에 sbyte
배열을 보낼 수 있지만 일단 내가 항상 null
얻을 읽기 메시지를 다시하려고하면.WebSphere MQ에서 SetBytesProperty 및 GetBytesProperty를 사용하는 방법은 무엇입니까?
다음은 문제를 재현하는 데 사용하는 가장 간단한 코드입니다.
[TestFixture]
public class MQQueueTests {
public const string MessageContent = "<test>This is test message</test>";
[Test]
public void PutAndGetMessage() {
Environment.SetEnvironmentVariable("MQCCSID", "437");
var properties = new Hashtable
{
{MQC.HOST_NAME_PROPERTY, "TestServer"},
{MQC.CHANNEL_PROPERTY, "Test.Channel"},
{MQC.PORT_PROPERTY, 1415}
};
using (var manager = new MQQueueManager("Test.Queue.Manager", properties)) {
using (MQQueue queue = manager.AccessQueue("Test.Queue",
MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_AS_Q_DEF)) {
MQMessage message = new MQMessage();
message.SetBytesProperty("testBytesValue",
new sbyte[] { 8, 12, 22, 48, 68, 71, 92, 104 });
message.WriteUTF(MessageContent);
queue.Put(message);
MQMessage readMessage = new MQMessage();
queue.Get(readMessage);
sbyte[] array = readMessage.GetBytesProperty("testBytesValue");
Assert.IsNotNull(array); // <-- FAILS!
Assert.AreEqual(MessageContent, readMessage.ReadUTF());
queue.Close();
}
manager.Disconnect();
}
}
}
뭔가가 큐에 메시지 속성에 전달 - 나는 서버에 WebSphere MQ 탐색기에서 뭔가를 볼 수 있지만 내 통과 배열처럼 보이지 않는 (그것도 시간이 지남에 따라 변경 새 메시지가 수신 될 때) : 큐에 메시지를 넣는 경우
이 로그에 존재 :
내가 MQ 클라이언트에 (strmqtrc
)을 추적 켜면 나는 같은 값 쓴 클라이언트에 의해 읽어 볼 수 있습니다 :
Data:-
0x00000000 026B5878 3C 75 73 72 3E 3C 74 65 73 74 42 79 74 65 73 56 : <usr><testBytesV
0x00000000 026B5888 61 6C 75 65 20 64 74 3D 22 62 69 6E 2E 68 65 78 : alue dt="bin.hex
0x00000000 026B5898 22 20 3E 30 38 30 63 31 36 33 30 34 34 34 37 35 : " >080c163044475
0x00000000 026B58A8 63 36 38 3C 2F 74 65 73 74 42 79 74 65 73 56 61 : c68</testBytesVa
0x00000000 026B58B8 6C 75 65 3E 3C 2F 75 73 72 3E 20 20 : lue></usr>
큐에서 메시지를 받고 (내가 짧게하기 위해 일부 데이터를 제거하지만, 중요한 부분은 정확히 로그에서 같다) 할 때 로그에 존재 :
Receiving Data:-
0x00000000 1D2A5090 20 20 20 20 20 20 20 20 00 00 00 00 B8 04 00 00 : ....¸...
0x00000000 1D2A50A0 4C 00 00 00 3C 75 73 72 3E 3C 74 65 73 74 42 79 : L...<usr><testBy
0x00000000 1D2A50B0 74 65 73 56 61 6C 75 65 20 64 74 3D 22 62 69 6E : tesValue dt="bin
0x00000000 1D2A50C0 2E 68 65 78 22 20 3E 30 38 30 63 31 36 33 30 34 : .hex" >080c16304
0x00000000 1D2A50D0 34 34 37 35 63 36 38 3C 2F 74 65 73 74 42 79 74 : 4475c68</testByt
0x00000000 1D2A50E0 65 73 56 61 6C 75 65 3E 3C 2F 75 73 72 3E 20 20 : esValue></usr>
0x00000000 1D2A50F0 00 21 3C 74 65 73 74 3E 54 68 69 73 20 69 73 20 : .!<test>This is
0x00000000 1D2A5100 74 65 73 74 20 6D 65 73 73 61 67 65 3C 2F 74 65 : test message</te
0x00000000 1D2A5110 73 74 3E 34 54 53 48 4D 00 00 00 34 00 00 00 01 : st>4TSHM...4....
모두 보내는 그래서
및 수신 올바른 바이트 배열을 참조하십시오. 그러나 .NET 코드에서 속성 값은 null
입니다 :
다른 모든 GetXXXProperty
및 SetXXXProperty
방법 쌍은 아무 문제없이 작동합니다.
편집 : 나는 그것을에서는 WebSphere MQ 클라이언트의 동일한 버전을 실행하는 여러 대의 컴퓨터에서 작동하지 않습니다와 나는 또한 다른 코드가 작동하지 않는다는 것을 확인하는 것이 확인
. 테스트를 Java로 다시 작성하고 대신 Java API를 사용하면 작동합니다!
또한 MQTopic
에 타겟팅 된 메시지의 속성을 전송하는 데 문제가 있습니다. MQException : MRQC_HEADER_ERROR
이 있습니다. 다시 문제없이 Java에서 작동합니다.
어떤 버전의 클라이언트와 'amqmdnet' 라이브러리를 사용하고 있는지 확인할 수 있습니까? 나는 두 컴퓨터에서 여러 번 코드를 시도했다. 클라이언트에 설치된'MQMessagePropertiesSample'도 사용했다. (기본적으로 바이트 배열을 포함하지 않았다. 절대로 작동하지 않지만 JUnit으로 Java로 테스트를 작성하면 작동합니다! –
그건 내가 언젠가 다시 쓴 프로그램 이었지만 내가 시도한 클라이언트의 버전을 기억하지 못했습니다. 하지만 오늘은 MQ v7016을 확인한 결과 동일한 오류가 발생했습니다. 반환 된 배열은 null입니다. IBM 지원을 요청할만한 가치가 있습니다. – Shashi