C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 23 を表示中)
■10264 / )  Re[4]: ジャーナルキューの参照
□投稿者/ れい (196回)-(2007/11/14(Wed) 22:09:59)
No10196 (カンタービレ さん) に返信
> ご指摘のあったキュー名やパスをインスタンス生成後に動的に設定してみましたが
> 空のインスタンスを生成後にPathを指定した時点で例外・・もしくは

コンストラクタでのPath指定はエラーチェックがありません。
プロパティからのPath指定は「簡単な」構文チェックが入っています。
「簡単な」構文チェックも通らないようでは、キューも開けるわけ無いので、
問題を分離するためにも、プロパティで指定するのをお勧めします。

また、「private」や「journal」は大文字をお勧めします。
メッセージキューは区別しないはずですが、
MessageQueueおよび関連クラスの内部で区別してはいけないはずのものを区別していた、
というバグが昔あった気がします。

> FormatNameプロパティはReadOnlyなので直接指定も出来ず・・・書き方が悪いのでしょうか。。

FormatName自体は指定できませんが、Pathに"FormatName:XXX"で指定することで指定できます。

No10205 (カンタービレ さん) に返信
> 自己レスしマス。
> http://msdn2.microsoft.com/ja-jp/library/ktb2ecsw(VS.80).aspx
> http://msdn2.microsoft.com/ja-jp/library/system.messaging.messagequeue.path(VS.80).aspx
> を読み直し、ジャーナルキュー名の場合、private$がないことに気がつき、直してみました。

プライベートキューはPRIVATE$/xxxx/JOURNAL$という指定で間違いありません。
リンク先の例もパブリックキューの例です。

PRIVATE$が無いのはパブリックキューですから、
> でも・・・今度はワークグループではサポートしていない例外に変わっただけでした。。
ドメインでしか使えないパブリックキューを見ようとしてるのでエラーがでます。

> [形式名によるジャーナルキューの参照]
> @FORMATNAME:PUBLIC=QueueGUID;JOURNAL
> または
> AFORMATNAME:PRIVATE=MachineGUID\QueueNumber;JOURNAL
> だそうデス。
> ネットワーク上のプライベートのジャーナルキューは@では参照できないようデス。

GUIDを使うときはそうですね。
@はPUBLICとあるように、当然パブリックキュー用です。

> Aでアクセスしたいと思っても、MachineGUIDって何か説明もなく、今参照しようとしているキューちゃんが
http://www.microsoft.com/japan/msdn/msmq/psdkdoc.aspx
こことか、MSDNとかに書いてあります。
MQGetMachinePropertiesで取得できます。

> [1回目]
> コンストラクタへの指定   :FormatName:DIRECT=OS:サーバ名\private$\キュー名\journal$
>
> MQインスタンスのFormatName :DIRECT=OS:サーバ名\private$\キュー名\journal$
> MQインスタンスのPath    :FormatName:DIRECT=OS:サーバ名\private$\キュー名\journal$
> MQインスタンスのQueueName :形式が無効です。
> MQインスタンスのMachineName:形式が無効です。
>
> 形式名は無効です。
> 場所 System.Messaging.MessageQueue.MQCacheableInfo.get_ReadHandle()
> 場所 System.Messaging.MessageEnumerator.get_Handle()
> 場所 System.Messaging.MessageEnumerator.MoveNext(TimeSpan timeout)
> 場所 System.Messaging.MessageEnumerator.MoveNext()

まずFormatNameを作成し、その後キューを呼び出すでしょうから、
スタックから見る限り、これが一番成功してますよね。

> コンストラクタへの指定   :FormatName:DIRECT=OS:サーバ名\private$\キュー名\journal$

これが変です。

mq.Path = "FormatName:DIRECT=OS:サーバ名\PRIVATE$\キュー名;JOURNAL"

が正しい指定です。
どうでしょう?
返信 編集キー/


管理者用

- Child Tree -