■10196 / ) |
Re[2]: ジャーナルキューの参照 |
□投稿者/ カンタービレ (42回)-(2007/11/13(Tue) 13:41:55)
|
2007/11/13(Tue) 13:48:55 編集(投稿者)
■No10188 (れい さん) に返信 > > 今環境がなくて試せないので、 > アドバイス程度です。 > >>渡しているパスは "マシン名\private$\キュー名\journal$" デス。 > > ずっと忘れてましたが、 > MessageQueueのコンストラクタでpathを渡すとそのpathは検証されないようで、 > 変なパスが指定できちゃいます。たぶんバグなんですが。 > オブジェクトを作ってからプロパティでpathを設定したほうがいいです。 > #後でフィードバックにあげときます。 > > アドバイスですが。 > > MessageQueueのFormatNameプロパティは正常になってますか? > FormatNameが実際に使われるので、これが変だとだめです。 > なんか昔はprivate$とかjournal$が小文字だと変になったような気がしますが、よく覚えてません。 > > コンストラクタで"FormatName: XXX"形式で指定してもだめですか? > > それと、エラーの詳細をください。 > StackTraceとか。 > > どっちにしろ、バグくさいなぁ
アドバイスありがとうございマス。 現状の1.0からのアップグレードソースを変更せずに検証してみました。
[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()
[2回目] コンストラクタへの指定 :サーバ名\private$\キュー名\journal$
MQインスタンスのFormatName :無効なキューのパス名です。 MQインスタンスのPath :サーバ名\private$\キュー名\journal$ MQインスタンスのQueueName :private$\キュー名\journal$ MQインスタンスのMachineName:サーバ名
無効なキューのパス名です。 場所 System.Messaging.MessageQueue.ResolveFormatNameFromQueuePath(String queuePath, Boolean throwException) 場所 System.Messaging.MessageQueue.get_FormatName() 場所 System.Messaging.MessageQueue.GetMessageEnumerator()
旧バージョンでは2回目がうまく動くような感じなのデスが、2005ではエラーとなっているようデス。 ご指摘のあったキュー名やパスをインスタンス生成後に動的に設定してみましたが 空のインスタンスを生成後にPathを指定した時点で例外・・もしくは MachineName、QueueNameを指定し、Pathプロパティがセットされたのを確認してみてもダメデス。。 FormatNameプロパティはReadOnlyなので直接指定も出来ず・・・書き方が悪いのでしょうか。。
[追記] ちなみに、同じフォーマットでローカルホストを指定した場合は例外発生しません。 ローカルコンピュータのネットワーク名で、localhostではありません。 前は例外発生しなかったのにぃぃぃ・・ぎゃぼん・・・
|
|