2

我希望这里的某个人能够帮助我解决从 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 版(从他们的网站上全新下载)。

4

3 回答 3

5

我尝试了与您在这里完全相同的方法,它似乎有效。内部网络上的某个人回复了您在 Nabble 上的请求,说有一个错误(在哪里?)已修复。也许下载最新版本的 Apache.NMS/Apache.NMS.ActiveMQ 并重试。

Apache.NMS 与Spring.NET一起提供——这可能是获取 Apache.NMS 的最好和最简单的方法。

于 2009-03-13T03:39:37.643 回答
1

好了,问题解决了。花了一段时间,但在安迪·怀特发送的帖子的帮助下,我能够按照我想要的方式启动并运行它。

问题当然是那些当前在http://svn.apache.org/viewvc/activemq/activemq-dotnet/上可用的库完全被破坏并且根本无法工作。

谢谢安迪!

于 2009-03-13T10:54:03.277 回答
1

只是为了回应评论“使用大小超过 25MB 的框架来发送和接收来自/到消息队列的消息似乎有点矫枉过正。”

我当然同意,这确实是一个打包问题,我们包括针对 .NET 1.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。

标记

于 2010-09-22T02:42:55.973 回答