服务总线System.InvalidOperationException

问题描述:

我想使用datacontractjson序列化程序向azure服务总线发送消息。我经常收到以下错误消息服务总线System.InvalidOperationException

未处理的异常:System.InvalidOperationException:由于其正文流已被部分使用而无法序列化消息。

这里是我的代码

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

主要代码:

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

}

它看起来好像流位置并不总是试图发送邮件之前重置为0。如果你尝试这样,它应该可靠地发送:

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); 
+0

当通过ServiceBus Queue Messaging发送Stream时遇到类似问题,并在将Stream.Position设置为零时解决。谢谢。 – 2015-07-13 05:59:37