2010-08-16 3 views
9

Existe-t-il un moyen de configurer des accusés de réception avec Spring.NET?Configuration des accusés de réception avec Spring.NET

Dans le code, il ressemble à ceci:

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

Pourrait-il être fait avec le ProductTemplate? Autrement?

Répondre

2

Pour moi, cette configuration a travaillé:

<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> 

Dans cet exemple, je raillé les (apparemment) les parties pertinentes des classes MSMQ. J'utilise un expression pour obtenir une comparaison par bit sur l'énumération.

Si vous register the AcknowledgeType avec le Spring.Core.TypeResolution.TypeRegistry en utilisant TypeRegistry.RegisterType("AcknowledgeTypes", typeof(AcknowledgeTypes));, l'expression Simplifie plus à:

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

Je l'ai testé avec le programme suivant, contre 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 
    } 
} 

Quelles sorties:

Q: orders-from-code; AcknowledgeType: FullReachQueue, FullReceive 
Q: orders-from-xml; AcknowledgeType: FullReachQueue, FullReceive 
Questions connexes