Question

J'espère que quelqu'un ici pourra m'aider dans mes difficultés d'intégration avec ActiveMQ de C #. Voici ce que j'ai fait jusqu'à présent:

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

Très basique: créez simplement une fabrique de connexions, puis utilisez-la pour créer la connexion et créez une session à la fin. Maintenant, quand j'exécute ce code, c'est l'exception qui est levée:

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

Quelqu'un a-t-il une idée de ce qui se passe? J'utilise Apache ActiveMQ version 5.2.0 (nouveau téléchargement sur leur site Web).

Était-ce utile?

La solution

J'ai essayé la même chose que vous avez ici et cela a semblé fonctionner. Quelqu'un sur Intraweb a répondu à votre demande sur Nabble qu’un bug (où?) Avait été corrigé. Peut-être télécharger la dernière version de Apache.NMS / Apache.NMS.ActiveMQ et réessayer.

Apache.NMS est livré avec Spring.NET - c'est probablement le moyen le plus simple et le plus simple de récupérez Apache.NMS.

Autres conseils

Eh bien, le problème est résolu. Cela a pris un certain temps, mais avec l’aide du message envoyé par Andy White, j’ai pu le faire fonctionner comme je le voulais.

Le problème était bien sûr que les bibliothèques actuellement disponibles sur http: // svn .apache.org / viewvc / activemq / activemq-dotnet / sont tout simplement cassés et ne fonctionnent pas du tout.

Merci Andy!

Juste pour répondre au commentaire "Il semble exagéré d'utiliser un framework de plus de 25 Mo de taille pour envoyer et recevoir des messages de / vers une file d'attente de messages."

Je suis tout à fait d’accord et c’est vraiment un problème de packaging. Nous incluons les fichiers binaires compilés pour les versions .NET 1.1 à 3.0 (versions de débogage et de publication avec .pdbs), exemples d’applications, etc. Si vous regardez la taille des fichiers .dll, vous devez créer une application Spring.NET basée sur ActiveMQ NMS:

Common.Logging 28 Ko, Spring.Aop 152 Ko, Spring.Core 744 Ko, Spring.Data 340 Ko et Spring.Messaging.Nns 104 Ko pour un total de ~ 1,4 Mo.

Mark

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top