Pregunta

Espero que alguien aquí pueda ayudarme con mis dificultades con la integración con ActiveMQ desde C #. Esto es lo que hice hasta ahora:

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();
    }
  }
}

Cosas bastante básicas: solo crea una fábrica de conexiones, luego úsala para crear la conexión y al final crea una sesión. Ahora, cuando ejecuto este código, esta es la excepción que se está lanzando:

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

¿Alguien tiene alguna idea de lo que está pasando? Estoy usando Apache ActiveMQ versión 5.2.0 (nueva descarga desde su sitio web).

¿Fue útil?

Solución

Intenté exactamente lo mismo que tienes aquí y pareció funcionar. Alguien en el intraweb respondió a su solicitud en Nabble de que había un error (¿dónde?) Que se solucionó. Tal vez descargue la última versión de Apache.NMS / Apache.NMS.ActiveMQ e intente nuevamente.

Apache.NMS viene con Spring.NET - esa es probablemente la mejor y más fácil forma de obtener Apache.NMS.

Otros consejos

Bueno, el problema está resuelto. Me llevó un tiempo, pero con la ayuda de la publicación que envió Andy White pude ponerlo en marcha de la manera que quería.

El problema era, por supuesto, que esas bibliotecas actualmente disponibles en http: // svn .apache.org / viewvc / activemq / activemq-dotnet / simplemente están rotos y no funcionan en absoluto.

¡Gracias Andy!

Solo para responder al comentario " Parece una exageración usar un marco que tiene más de 25 MB de tamaño solo para enviar y recibir mensajes desde / hacia una cola de mensajes. "

Ciertamente estoy de acuerdo y es realmente un problema de empaque, incluimos binarios compilados para .NET 1.1 a 3.0 (depuración y lanzamiento de compilaciones con .pdbs), documentos de referencia, aplicaciones de muestra, etc. Si observa el tamaño de los archivos .dlls que necesita para crear una aplicación Spring.NET basada en ActiveMQ NMS, es

Común. Registro 28KB, Spring.Aop 152KB, Spring.Core 744KB, Spring.Data 340KB y Spring.Messaging.Nns 104KB para un total de ~ 1.4MB.

Marcar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top