2010-08-16 14 views
9

C'è un modo per configurare i riconoscimenti con Spring.NET?Configurare i ringraziamenti con Spring.NET

Nel codice che assomiglia a questo:

var msgQ = new MessageQueue(OrdersQueueName) 
      { 
      DefaultPropertiesToSend = 
      { 
       AcknowledgeType = AcknowledgeTypes.FullReachQueue | 
           AcknowledgeTypes.FullReceive, 
       AdministrationQueue = new MessageQueue(AckQueueName) 
      } 
      }; 

Potrebbe essere fatto con il ProductTemplate? Un altro modo?

risposta

2

Per me, questa configurazione ha funzionato:

<objects xmlns="http://www.springframework.net"> 

    <!-- for http://stackoverflow.com/questions/3491152/configuring-acknowledgements-with-spring-net --> 

    <object name="orders" type="q3491152.MessageQueue, q3491152"> 
    <property name="Name" value="orders-from-xml" /> 
    <property name="DefaultPropertiesToSend"> 
     <object type="q3491152.PropertiesToSend, q3491152"> 
     <property name="AdministrationQueue" ref="anotherQ" /> 
     <property name="AcknowledgeType" 
        expression="T(q3491152.AcknowledgeTypes).FullReachQueue or T(q3491152.AcknowledgeTypes).FullReceive" /> 
     </object> 
    </property> 
    </object> 

    <object name="anotherQ" type="q3491152.MessageQueue, q3491152"> 
    <property name="Name" value="anotherQ" /> 
    </object> 

</objects> 

In questo esempio ho preso in giro le (apparentemente) parti rilevanti delle classi MSMQ. Io uso un expression per ottenere un confronto bit-saggio sull'enumerazione.

Se register the AcknowledgeType con la Spring.Core.TypeResolution.TypeRegistry utilizzando TypeRegistry.RegisterType("AcknowledgeTypes", typeof(AcknowledgeTypes));, l'espressione semplifica ulteriormente a:

<property name="AcknowledgeType" 
      expression="AcknowledgeTypes.FullReachQueue or AcknowledgeTypes.FullReceive" /> 

ho provato con il seguente programma, contro Spring.NET 1.3.1:

using System; 
using Spring.Context; 
using Spring.Context.Support; 

namespace q3491152 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      IApplicationContext ctx = new XmlApplicationContext("objects.xml"); 

      var qFromCode = new MessageQueue 
           { 
            Name="orders-from-code", 
            DefaultPropertiesToSend = 
             { 
              AcknowledgeType = AcknowledgeTypes.FullReachQueue | 
                   AcknowledgeTypes.FullReceive, 
              AdministrationQueue = new MessageQueue() 
             } 
           }; 

      var qFromXml = (MessageQueue) ctx.GetObject("orders"); 

      PrintQ(qFromCode); 
      PrintQ(qFromXml); 

      Console.ReadLine(); 
     } 

     private static void PrintQ(MessageQueue q) 
     { 
      Console.WriteLine("Q: {0}; AcknowledgeType: {1}", q.Name, q.DefaultPropertiesToSend.AcknowledgeType); 
     } 
    } 

    public class MessageQueue 
    { 
     public MessageQueue() 
     { 
      DefaultPropertiesToSend = new PropertiesToSend(); 
     } 

     public string Name { get; set; } 
     public PropertiesToSend DefaultPropertiesToSend { get; set; } 
    } 


    public class PropertiesToSend 
    { 
     public AcknowledgeTypes AcknowledgeType { get; set; } 
     public MessageQueue AdministrationQueue { get; set; } 
    } 

    [Flags] 
    public enum AcknowledgeTypes 
    { 
     None = 0, 
     FullReachQueue, 
     FullReceive 
    } 
} 

Quali uscite:

Q: orders-from-code; AcknowledgeType: FullReachQueue, FullReceive 
Q: orders-from-xml; AcknowledgeType: FullReachQueue, FullReceive 
Problemi correlati