1

キューに送信しようとすると、エラーが発生し続けます

指定された形式名は、要求された操作をサポートしていません。たとえば、ダイレクト キュー形式名は削除できません。

私のキュー名は構成ファイルに保存され、次のようになります

"FormatName:Direct=OS:MyComputerName\PRIVATE$\MyQueue"

存在する 2 つのキューがあり、各キューには、全員がフル コントロールを持つように設定されたアクセス許可があります。

想定できる SyncUser = "EVERYONE" または "My_Domain\operator"

//init the queues
qSync = new MessageQueue(queueName + "-sync")
            {Formatter = new XmlMessageFormatter(new Type[] {typeof (String)})};

qClient = new MessageQueue(queueName + "-client")
            {Formatter = new XmlMessageFormatter(new Type[] { typeof(String) })};

キューを作成してもエラーは発生しませんが、この Send 関数を呼び出すとエラーが発生します

**Send(qSync, "This is a message");** //Example

public void Send(MessageQueue queue, string msg)
{
    try
    {
        queue.Send(msg);
    }
    catch (MessageQueueException mqx)
    {
        var e = string.Format("Failed to Send - {0} | {1}", queue.QueueName, mqx.Message);
        OnSynchronizerMonitor(new SyncEvent(e));
    }
}

どんな助けでも大歓迎です。

編集

メッセージがリモート キューの宛先に到達しているように見えます、送信されたすべてのメッセージでアプリケーションが依然としてそのエラーをスローしています。デバッグ中に MessageQueues (qSync|qClient) を見ると、使用される前に、そのエラーがいくつかの内部フィールドに表示されます。

4

1 に答える 1

0

これをサポートするフォーラムの質問やドキュメントが見つからないように見えるので、誰かがこれを確認してくれることを願っていますが、MessageQueue にはイベントのセットアップに問題があるようです。

イベント コールを削除し、メイン プロセス内でキューの作成と送信をハードコーディングしただけで、すべて正常に機能しました。

私のセットアップは次のようなものです:

サービス - プロセッサ、シンクロナイザを作成し、イベントを設定します。

プロセッサは、文字列トランザクションを処理するスレッドを開始します。成功したプロセスでは、トランザクションをシンクロナイザ経由で送信する必要があるため、プロセッサはイベントをトリガーします。

Synchronizer は既にキューを作成しており、イベントがトリガーされてメッセージを送信するのを待っているだけです。

これがクロススレッドの問題であるか、私のシステムの単なる癖である可能性がある場合は、誰かが光を当てることができれば幸いです。

* * もう少し調査と試行錯誤を重ねた結果、イベントとのクロス スレッドの複雑さが原因でエラーが発生したようです。私の推測では、UI オブジェクトが作成されたスレッドとは別のスレッドから更新されるのと同様の問題であると思われます。エラーは基本的に所有権の問題です。メッセージは引き続き送信されますが、キューは元の所有者が呼び出しを開始したものではないことを訴えます。

于 2013-02-12T21:21:38.267 に答える