Spring.NETを使用しないApache ActiveMQアクセス
質問
ここの誰かが、C#のActiveMQとの統合に苦労しているのを助けてくれることを望んでいます。これまでにやったことは次のとおりです。
using Apache.NMS;
using Apache.NMS.ActiveMQ;
namespace JMSTest {
class Program {
static void Main(string[] args) {
IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616/");
IConnection connection = factory.CreateConnection();
ISession session = connection.CreateSession();
}
}
}
かなり基本的なもの:接続ファクトリを作成し、それを使用して接続を作成し、最後にセッションを作成します。このコードを実行すると、スローされる例外が発生します。
System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
Parameter name: length
at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
at System.String.Substring(Int32 startIndex, Int32 length)
at Apache.NMS.ActiveMQ.OpenWire.StringPackageSplitter.StringPackageSplitterEnumerator.System.Collections.IEnumerator.get_Current()
at Apache.NMS.ActiveMQ.OpenWire.OpenWireBinaryWriter.Write(String text)
at Apache.NMS.ActiveMQ.OpenWire.BaseDataStreamMarshaller.LooseMarshalString(String value, BinaryWriter dataOut)
at Apache.NMS.ActiveMQ.OpenWire.V2.ConnectionIdMarshaller.LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
at Apache.NMS.ActiveMQ.OpenWire.OpenWireFormat.LooseMarshalNestedObject(DataStructure o, BinaryWriter dataOut)
at Apache.NMS.ActiveMQ.OpenWire.BaseDataStreamMarshaller.LooseMarshalCachedObject(OpenWireFormat wireFormat, DataStructure o, BinaryWriter dataOut)
at Apache.NMS.ActiveMQ.OpenWire.V2.ConnectionInfoMarshaller.LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
at Apache.NMS.ActiveMQ.OpenWire.OpenWireFormat.Marshal(Object o, BinaryWriter ds)
at Apache.NMS.ActiveMQ.Transport.Tcp.TcpTransport.Oneway(Command command) : Transport connection error: Index and length must refer to a location within the string.
Parameter name: length
何が起こっているのか誰にもわかりませんか? Apache ActiveMQバージョン5.2.0を使用しています(Webサイトからの新規ダウンロード)。
解決
ここにあるものとまったく同じことを試してみましたが、うまくいくようです。イントラウェブの誰かが、修正されたバグ(どこ?)があるというNabbleのリクエストに応答しました。 Apache.NMS / Apache.NMS.ActiveMQの最新バージョンをダウンロードして、もう一度お試しください。
Apache.NMSには Spring.NET が付属しています。これがおそらく最も簡単で簡単な方法です。 Apache.NMSを取得します。
他のヒント
まあ、問題は解決しました。しばらく時間がかかりましたが、アンディ・ホワイトが送った投稿の助けを借りて、思い通りに立ち上げて実行することができました。
もちろん、問題は、現在これらのライブラリが http:// svnで利用可能であることでした.apache.org / viewvc / activemq / activemq-dotnet / は単純に壊れており、まったく機能しません。
アンディ、ありがとう!
コメントに返信するだけ" 25MBを超えるサイズのフレームワークを使用して、メッセージキューとの間でメッセージを送受信するだけではやり過ぎだと思われます
確かに同意します。これは実際にはパッケージングの問題です。.NET1.1〜3.0(.pdbsを使用したデバッグおよびリリースビルド)のリファレンスドキュメント、サンプルアプリなどのコンパイル済みバイナリが含まれています。 ActiveMQ NMSベースのSpring.NETアプリを作成するために必要な.dllのサイズを見ると、
Common.Logging 28KB、Spring.Aop 152KB、Spring.Core 744KB、Spring.Data 340KB、Spring.Messaging.Nns 104KB、合計約1.4MB。
マーク