2

キュー情報を取得する次のコードがあります。これは2232、トランザクションの一部として実行されるとエラーをスローします。

Dim specificQMConnProperties As Hashtable = CType(queueManagerConnectionProperties.Clone(), Hashtable)
specificQMConnProperties.Add(MQC.HOST_NAME_PROPERTY, qmgrHostNameOrIP)
specificQMConnProperties.Add(MQC.PORT_PROPERTY, qmgrPort)
specificQMConnProperties.Add(MQC.CHANNEL_PROPERTY, qmgrChannel)
Dim qmgr As MQQueueManager = Nothing
Try
    qmgr = New MQQueueManager(qmgrName, specificQMConnProperties)
Catch ex As MQException
    Select Case ex.ReasonCode
        Case 2059, 2538
            ' qmgr or host not available
            Return nothing
        Case Else
            ' continue
    End Select
End Try

If qmgr IsNot Nothing Then
Try
    ' use PCF to get queue information.
    Dim agent As New PCFMessageAgent(qmgr)
    Dim request As New PCFMessage(CMQCFC.MQCMD_INQUIRE_Q)
    request.AddParameter(MQC.MQCA_Q_NAME, queueName)

    Dim responses As PCFMessage() = Nothing

    Try
        ' connected
        responses = agent.Send(request)
    Catch pcfex As PCFException
        LogException(pcfex, {queue}, "Exception checking queue availability via PCF. Assuming false")
        Return Nothing
    End Try

    If responses IsNot Nothing AndAlso responses.Any() Then
        LogDebug("Checking queue availability for " & queue.ToString() & " returned a PCF result.")
        return responses
    Else
        LogError("No result returned from PCF Message request on " & queue.ToString())
        Return Nothing
    End If
Catch ex As MQException
    LogException(ex, {queue})
    Return False
End Try
End If

次のように、行でエラーが発生しresponses = agent.Send(request)ます。

完了コード: 2、理由コード: IBM.WMQ.MQDestination.Put(MQMessage メッセージ、MQPutMessageOptions pmo) の 2232(2232=MQRC_UNIT_OF_WORK_NOT_STARTED) IBM.WMQ.PCF.PCFAgent.Send(Int32 コマンド、PCFParameter[] パラメーター) IBM .WMQ.PCF.PCFMessageAgent.Send (PCFMessage 要求、ブール値チェック) で IBM.WMQ.PCF.PCFMessageAgent.Send (PCFMessage 要求) で MyMethod

残りのトランザクション接続オプション (メッセージの get または put など) をOr MQC.MQGMO_SYNCPOINT追加しましたが、PCF メッセージの接続オプションを設定する方法がわかりません。誰でも手伝ってもらえますか?

明確にするために、トランザクションの一部として送信されるかどうかはあまり気にしませんが、Transactionscope が開いているため、このエラーが発生します。

- 編集 -

上部にキュー マネージャー接続のコードを追加しました。

4

2 に答える 2

1

これは奇妙です。UOW (作業単位) の下にある場合、キュー マネージャーのコマンド サーバーが PCF コマンドをどのように処理できると思いますか? PCF メッセージ (コマンド サーバーのキューに入れられる) は、コミットするまで見えません。

取得後にキューを照会する必要がある理由はわかりませんが、これが機能する唯一の方法は、それが UOW の外にある場合です。

于 2015-11-17T23:03:22.167 に答える