none
Duda: Guardar en MSMQ al generar excepción en WCF

    Pregunta

  • Cordial saludo,

    Tengo la siguiente duda:

    Tengo 2 servicios WCF, uno consume al otro (1 consume a 2), pero cuando 2 no este disponible 1 debe guardar la información en una Cola MSMQ.

    Lo estoy haciendo que cuando el servicio 2 no este disponible (genere error de CommunicationFault) guarde la información en una cola pero el problema es que no me esta guardando nada.

    Mi duda es, si es posible que guarde la información en una cola cuando se genere una excepción? o esto no se puede hacer?

    Me pueden dar una luz de como realizar esto.

    Muchas gracias, Saludos

    lunes, 17 de diciembre de 2012 23:21

Todas las respuestas

  • ¿Has probado a poner la llamada al WCF 2 dentro de un try ... catch y poner en el catch la inserción en la cola?

    Esto debe ir perfectamente


    @XaviPaper
    http://geeks.ms/blogs/xavipaper

    lunes, 17 de diciembre de 2012 23:56
  • Hola XaviPaper, gracias por responder,

    Tengo un problemilla, cuando voy a consumir el otro servicio WCF y este no esta disponible, se genera la excepción y en esta excepción realizo lo siguiente:

    if (Convert.ToBoolean(usarQueque))
                    {
                        //TODO: Guardar en cola.
                        string queueName = ConfigurationManager.AppSettings["QueueName"];
                        System.Messaging.MessageQueue mq;
    
                        if (MessageQueue.Exists(queueName))
                        {
                            mq = new System.Messaging.MessageQueue(queueName);
                        }
                        else
                        {
                            //MessageQueue.Create(queueName, true);
                            mq = MessageQueue.Create(queueName, true);
                        }
    
                        //Enviar informacion a la cola.
                        System.Messaging.Message mm = new System.Messaging.Message();
                        mm.Label = request.ExternalSystemData.CasoID;
                        mm.Body = request;
                        mq.Send(mm);


    El problema es que si me crea la cola pero no me guarda los mensajes.

    Se debe realizar alguna otra configuración?? colocar algo en el web.config de MSMQ?

    Esta bien hecho esto así?

    Muchas gracias,

    Edit: Ya me guarda el mensaje en la Cola cuando se genera una excepción con el siguiente código: 

    string usarQueque = string.IsNullOrEmpty(ConfigurationManager.AppSettings["UsarQueque"]) ? "false" : ConfigurationManager.AppSettings["UsarQueque"];
    
                    if (Convert.ToBoolean(usarQueque))
                    {
                        //TODO: Guardar en cola.
                        string queueName = ConfigurationManager.AppSettings["QueueName"];
                        System.Messaging.MessageQueue mq;
    
                        if (MessageQueue.Exists(queueName))
                        {
                            mq = new System.Messaging.MessageQueue(queueName);
                        }
                        else
                        {
                            //MessageQueue.Create(queueName, true);
                            mq = MessageQueue.Create(queueName, true);
                        }
    
                        //Enviar informacion a la cola.
                        System.Messaging.Message mm = new System.Messaging.Message();
                        mm.Label = request.ExternalSystemData.CasoID;
                        mm.Body = request;
                        MessageQueueTransaction mTrans = new MessageQueueTransaction();
                        if (mq.Transactional)
                        {
                            mTrans.Begin();
                            mq.Send(mm, mTrans);
                            mTrans.Commit();
                            mTrans.Dispose();
                        }

    Tengo la duda de si esta es la forma correcta de realizar esto, Porque según veo de esta forma para consumir el WCF, lo consumiría por medio del protocolo http, tcp y no necesariamente por MSMQ. ya que se pretende que se pueda configurar si se utiliza la cola o no.

    Muchas gracias por sus respuestas, Saludos

    • Editado nelson88 miércoles, 26 de diciembre de 2012 22:26 Ya me guarda los mensajes.
    miércoles, 26 de diciembre de 2012 20:27