更新按照發表意見,澄清了一個問題:
括在一個try塊你PUT
,趕上MQException
。如果沒有MQException
被引發,那麼PUT
工作,你回到RC = 0。例如,這是從樣品PUT
程序:
void PutMessages()
{
try
{
// mq properties
properties = new Hashtable();
properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
properties.Add(MQC.HOST_NAME_PROPERTY, hostName);
properties.Add(MQC.PORT_PROPERTY, port);
properties.Add(MQC.CHANNEL_PROPERTY, channelName);
// display all details
Console.WriteLine("MQ Parameters");
Console.WriteLine("1) queueName = " + queueName);
Console.WriteLine("2) host = " + hostName);
Console.WriteLine("3) port = " + port);
Console.WriteLine("4) channel = " + channelName);
Console.WriteLine("5) numberOfMsgs = " + numberOfMsgs);
Console.WriteLine("");
// create connection
Console.Write("Connecting to queue manager.. ");
queueManager = new MQQueueManager(queueManagerName, properties);
Console.WriteLine("done");
// accessing queue
Console.Write("Accessing queue " + queueName + ".. ");
queue = queueManager.AccessQueue(queueName, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);
Console.WriteLine("done");
// creating a message object
message = new MQMessage();
message.WriteString(messageString);
// putting messages continuously
for (int i = 1; i <= numberOfMsgs; i++)
{
Console.Write("Message " + i + " <" + messageString + ">.. ");
queue.Put(message);
Console.WriteLine("put");
}
// closing queue
Console.Write("Closing queue.. ");
queue.Close();
Console.WriteLine("done");
// disconnecting queue manager
Console.Write("Disconnecting queue manager.. ");
queueManager.Disconnect();
Console.WriteLine("done");
}
catch (MQException mqe)
{
Console.WriteLine("");
Console.WriteLine("MQException caught: {0} - {1}", mqe.ReasonCode, mqe.Message);
Console.WriteLine(mqe.StackTrace);
}
}
如上所述,這是從示例代碼和用於生產可能會具有更精細的異常處理一個真正的程序。也就是說,API調用將成功或拋出MQException
。確切的行爲取決於你的選擇。例如,如果您請求GET
上的消息轉換,則可能會收到轉換錯誤,而作爲二進制有效內容檢索到的完全相同的消息會成功。
上回應:
我不知道我理解的問題,但我認爲你問的是如何設計的請求/使用WebSphere MQ答辯程序,這就是我怎麼樣我會迴應。但是,如果通過「回覆」,您確實指出了PUT
的原因並返回代碼,請澄清問題,我會更新我的回答。
請求/響應的通常模式是請求程序首先打開回復隊列。如果打開的隊列的名稱是模型隊列,則隊列管理器將創建一個動態隊列並返回該句柄。否則,隊列必須是預先存在的本地隊列。
一旦應用程序在回覆隊列中有一個句柄,它就會打開請求隊列並創建一個新的請求消息。本地回覆隊列的名稱用於初始化請求消息的replyToQueue
字段。本地隊列管理器名稱將自動填入消息的replyToQMgr
字段。然後,應用程序將該消息放入回覆隊列中並等待回覆。
如果有多個應用程序實例在相同的回覆隊列中偵聽,他們通常爲他們想要的特定消息指定相關ID。通常的設計是,讀取請求消息的服務器將MQMD.MsgID
放入回覆消息的MQMD.CorrelID
字段中,但有時會將傳入的消息ID傳輸到出站消息ID。
一定要COMMIT
的PUT
發出GET
之前,否則你將永遠不會得到答覆。
關於此,Infocenter主題Design of the Request sample program中有更多內容,您可以在默認的Windows WMQ客戶端安裝中找到示例程序C:\Program Files (x86)\IBM\WebSphere MQ\tools\dotnet
。我鼓勵你熟悉這些示例,並重新使用一些代碼。如果您沒有真正下載並安裝完整的客戶端,請撥打免費的SupportPac MQC75。然後,當您安裝它時,一定要選擇安裝SDK和示例代碼的選項。
感謝。 PUT方法是返回void類型,如果它會一直布爾例如,根據返回值 - 真/假,我可以證實,消息被髮送到隊列中,這是我的問題,我怎麼回去的確認,以便消息被髮送到隊列。 – Sharpeye500 2013-02-26 00:03:43