2016-03-23 6 views
4


Ich benutze NetMQ für Interprozess-Datenkommunikation.
Ich benutze das NuGet-Paket Version 3.3.2.2 auf .Net 4.5
Ich möchte eine einfache Nachricht aus einer Zeichenfolge erstellen und über eine RequestSocket senden.System.ArgumentNullException mit NetMQ.Msg.Put()

Ich bekomme immer System.ArgumentNullException, obwohl keine der Instanzen in keinem Punkt null sind.

mein Selbst mit dem Code:

static void Main(string[] args) 
{ 
    string exampleString = "hello, world"; 

    byte[] bytes = new byte[exampleString.Length * sizeof(char)]; 
    if (bytes == null) 
    { 
     return; 
    } 

    System.Buffer.BlockCopy(exampleString.ToCharArray(), 0, bytes, 0, bytes.Length); 

    var clientMessage = new NetMQ.Msg(); 
    clientMessage.InitEmpty(); 

    if (!clientMessage.IsInitialised) 
    { 
     return; 
    } 

    clientMessage.Put(bytes, 0, bytes.Length); //throws exception! 

} 
+0

ungerade. Es scheint nichts im [NetMQ-Code] (https://github.com/zeromq/netmq/blob/master/src/NetMQ/Msg.cs) für die Methode zu geben, die diese Ausnahme explizit auslöst. –

+0

Das liegt daran, dass Ihre 'clientMessage' initialisiert ist, aber keine MsgType wegen' InitEmpty() 'hat. –

+0

@diiN_ Wie wollen Sie es initialisieren? –

Antwort

2

Wenn Sie Put nennen es nennt Buffer.BlockCopy(src, 0, Data, i, len);

Von github

public void Put([CanBeNull] byte[] src, int i, int len) 
{ 
    if (len == 0 || src == null) 
     return; 

    Buffer.BlockCopy(src, 0, Data, i, len); 
} 

In diesem Punkt Datanull ist, und Buffer.BlockCopy führt den ArgumentNullException

Versuchen Sie, es zu initialisieren, indem Sie InitPool oder InitGC aufrufen.

+0

cool. Ich bekomme es jetzt funktioniert! –

Verwandte Themen