user3581242
user3581242

Reputation: 17

Service bus System.InvalidOperationException

I am trying to send a message to the azure service bus using datacontractjson serializer. I get the below error message very often

Unhandled Exception: System.InvalidOperationException: Failed to serialize the message because its body stream has been partially consumed.

Here is my code

[DataContract]
class flow
{
    [DataMember]
    public string srcip {get; set;}
    [DataMember]
    public string dstip {get; set;}
}

Main code:

class Program
   {
        static void Main(string[] args)
       {
        string connectionString = "XXXXXX";

        MessagingFactory factory = MessagingFactory.CreateFromConnectionString(connectionString);

        flow f = new flow()
        {
            srcip = "10.1.1.1",
            dstip = "20.1.1.1"
        };


        //Sending a message

        MessageSender testQueueSender = factory.CreateMessageSender("XXXXX");

        MemoryStream stream1 = new MemoryStream();
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(flow));
        ser.WriteObject(stream1, f);

        BrokeredMessage message = new BrokeredMessage(stream1);

        testQueueSender.Send(message);

        Console.WriteLine("Message(s) sent.");





        Console.WriteLine("Done, press a key to continue...");

        Console.ReadKey();
    }
}

}

Upvotes: 1

Views: 1865

Answers (1)

Dominic Betts
Dominic Betts

Reputation: 2331

It looks as if the stream position is not always reset to 0 before attempting to send the message. If you try this it should send reliably:

MessageSender testQueueSender = factory.CreateMessageSender("testpath");

MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(flow));
ser.WriteObject(stream1, f);

stream1.Position = 0;

BrokeredMessage message = new BrokeredMessage(stream1);

testQueueSender.Send(message);

Upvotes: 5

Related Questions