Reputation: 17
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
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