MSMQ периодически вызывает IOException при использовании .NET - PullRequest
1 голос
/ 07 февраля 2012

Временная проблема с MSMQ, при которой он генерирует System.IO.IOException при отправке в очередь.По этой информации я не могу найти никакой информации, поэтому не уверен, почему это может произойти (документация MSDN даже не перечисляет эту проблему).Как уже говорилось, это прерывисто, поэтому отладка трудна и не происходит в среде разработчика (только в QA)

Трассировка стека:

   at Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(System.CodeDom.Compiler.CompilerParameters, System.String[])
   at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(System.CodeDom.Compiler.CompilerParameters, System.String[])
   at System.Xml.Serialization.Compiler.Compile(System.Reflection.Assembly, System.String, System.Xml.Serialization.XmlSerializerCompilerParameters, System.Security.Policy.Evidence)
   at System.Xml.Serialization.TempAssembly.GenerateAssembly(System.Xml.Serialization.XmlMapping[], System.Type[], System.String, System.Security.Policy.Evidence, System.Xml.Serialization.XmlSerializerCompilerParameters, System.Reflection.Assembly, System.Collections.Hashtable)
   at System.Xml.Serialization.TempAssembly..ctor(System.Xml.Serialization.XmlMapping[], System.Type[], System.String, System.String, System.Security.Policy.Evidence)
   at System.Xml.Serialization.XmlSerializer..ctor(System.Type, System.String)
   at System.Messaging.XmlMessageFormatter.Write(System.Messaging.Message, System.Object)
   at System.Messaging.Message.AdjustToSend()
   at System.Messaging.MessageQueue.SendInternal(System.Object, System.Messaging.MessageQueueTransaction, System.Messaging.MessageQueueTransactionType)
   at Test.MSMQWrite.WriteMessageInternal(System.String, System.Object, Boolean)
   at Test.Program.Main(System.String[])

Код для WriteMessageInternal:

private static void WriteMessageInternal(string queueName, object data)
{            
    using (var queue = new MessageQueue(queueName, false, false, QueueAccessMode.Send))
    {                
        queue.Send(data);
    }
}
...