Quantcast
Channel: Error Crear Service broker...
Viewing all articles
Browse latest Browse all 4

Error Crear Service broker...

$
0
0
<!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} p {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:595.3pt 841.9pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> <!-- /* Font Definitions */ @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627421319 -2147483648 8 0 66047 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} p {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 3.0cm 70.85pt 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

Que tal, buenos días...  y gracias por su atención; 

Tengo un problema y quiero dárselos a conocer por si me pueden ayudar... uso SQLServer y Visual Basic 2005.

Tengo un procedimiento almacenado que por Query Analyzer demora 10 minutos aprox. (por cierto, Ejecuta procesos de un servidor a otro)

El problema es que ahora es necesario ejecutarlo desde un webform, buscando como hacerlo encontré Services broker, talvez no sea la mejor opción, pero es la que encontré... (Si alguno conoce una mejor solución, favor hacerla saber...)

He bajado códigos de ejemplo, libros, etc., etc... (Ingles y no lo manejo) y no hay caso, no me logra funcionar y ya he dado vuelta tantas veces el código que hasta pena me da mostrarlo, por lo mismo agradecería mucho algún tipo de ayuda...

Bueno, la idea, es enviar el mensaje desde asp.net y que el SQL ejecute el SP, una vez finalizado envíe un email o algo que acusando el término del proceso...

Bueno, he aquí el código…


Use master
Go

/* Eliminar Base Datos. */
---------------------------------------------------------------------
IF EXISTS
(SELECT * FROM sys.databases WHERE name = 'Contabilidad')
Begin
    Drop Database [Contabilidad]
End
Go

CREATE DATABASE [Contabilidad]

/* Activar SSB. */
---------------------------------------------------------------------
IF NOT EXISTS
(SELECT * FROM sys.databases WHERE name = 'Contabilidad' AND is_broker_enabled = 1)
Begin
    Alter Database [Contabilidad] Set Enable_broker
End
Go

---------------------------------------------------------------------
Use [Contabilidad]
Go


---------------------------------------------------------------------
---------------------------------------------------------------------
---------------------------------------------------------------------
---------------------------------------------------------------------
---------------------------------------------------------------------



--MENSAJES...
Create Message Type
[//Contabilidad/Voucher/Mensajes/Iniciar]
Authorization [dbo]
Validation = Well_formed_xml
Go

Create Message Type [//Contabilidad/Voucher/Mensajes/Respuesta]
Authorization [dbo]
Validation = Well_formed_xml
Go


--CONTRATO...
Create Contract
[//Contabilidad/Voucher/Contratos/GenerarVoucher]
Authorization [dbo]
(
  [//Contabilidad/Voucher/Mensajes/Iniciar]        Sent By Initiator,
  [//Contabilidad/Voucher/Mensajes/Respuesta]    Sent By Target
)
Go




------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------




--COLAS...
Create Queue [dbo].[//Contabilidad/Voucher/Cola/Iniciar]
With Status = On,
Retention = On,
Activation
            (
               Status = On,
               Procedure_name = [dbo].[Reca_Sp_IniciaServicioVoucher],
               Max_queue_readers = 1,
               Execute As N'dbo'
            ) On [PRIMARY]
Go


Create Queue [dbo].[//Contabilidad/Voucher/Cola/Respuesta]  
With Status = On,
Retention = On,
Activation
            (
               Status = On,
               Procedure_name = [dbo].[Reca_Sp_RespuestaServicios],
               Max_queue_readers = 1,
               Execute As N'dbo'
            ) On [PRIMARY]
Go


--SERVICIOS
Create Service
[//Contabilidad/Voucher/Servicios/Iniciar] Authorization [dbo]  
On Queue [dbo].[//Contabilidad/Voucher/Cola/Iniciar]
(
[//Contabilidad/Voucher/Contratos/GenerarVoucher]
)
Go

Create Service [//Contabilidad/Voucher/Servicios/Respuesta] Authorization [dbo]  
On Queue [dbo].[//Contabilidad/Voucher/Cola/Respuesta]
(
[//Contabilidad/Voucher/Contratos/GenerarVoucher]
)
Go


--PROCEDIMIENTOS...

If Exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Reca_Sp_IniciaServicioVoucher]')
    and OBJECTPROPERTY(id, N'IsProcedure') = 1)
        Drop Procedure [dbo].[Reca_Sp_IniciaServicioVoucher]
Go

Create Procedure [dbo].[Reca_Sp_IniciaServicioVoucher]
WITH EXECUTE AS OWNER
As
SET NOCOUNT ON
Begin
    --Variables Service Broker...
    Declare @dialog UNIQUEIDENTIFIER,
            @conversation_group_id UNIQUEIDENTIFIER,
            @message_body XML,
            @message_type_id Int,
            @message_type_name NVARCHAR(128);
           
    --Variables Error...
    Declare @ErrorMsg Varchar(100);

    BEGIN TRY
        Begin Transaction

        WAITFOR (
                    RECEIVE TOP(1)
                        @dialog = conversation_handle,
                        @message_type_id = message_type_id, --el tipo de mensaje recibido
                        @message_type_name = message_type_name,
                        @message_body =
                        CASE
                            WHEN validation = 'X' THEN CAST(message_body AS XML)
                            ELSE CAST(N'<none/>' AS XML)
                        END
                    FROM [dbo].[//Contabilidad/Voucher/Cola/Respuesta]
                ), TIMEOUT 60000;
           
            ---------------------------------------------------------------------
            IF @@ROWCOUNT = 0 OR @@ERROR <> 0
            Begin
                --Rollback Transaction
                Set @ErrorMsg = 'Error: NO existen Conversaciones disponibles.'
                                + Space(1) + '- Sp: [Reca_Sp_IniciaServicioVoucher]';
                                   
                --End Conversation @dialog
                --Rollback Transaction
                Raiserror (@ErrorMsg, 10, 1) With Log;
               
            End

            /* Mostrar el mensaje. */
            ---------------------------------------------------------------------
                 
            IF @message_type_name =
                '//Contabilidad/Voucher/Mensajes/Iniciar'   
                Begin           
                    Begin try
                   
                        Declare @message XML
                        Set @message =
                                        N'<RespuestaVoucher>
                                            Claudio Becerra
                                        </RespuestaVoucher>';
                   
                        -- Enviar mensaje al remitente.
                        Exec Seguridad..sp_send_mail
                            @from            = 'MonitorSQL@ParquesdeChile.cl',
                            @to                = 'Cbecerra@ParquesdeChile.cl',--Destinatario
                            @subject        = 'Creacion Servicio - Creación de Vouchers.',
                            @body            = 'Testeo',
                            @bodytype        = 'TextBody',
                            @output_mesg    = Null,
                            @output_desc    = Null;
                           
                        --Exec Conta_Desarrollo..RECA_sp_GeneraRecaudacion_Masiva
                        --     @Mes_Hasta_            = 5,
                        --     @Year_Hasta_            = 2010,
                        --     @IdTipoComprobante_    = 3,
                        --     @IdProceso_            = 11,
                        --     @IdUsuario_            = '1';
                           
                        /* Enviar Mensaje acusando Recepcion. */
                        ---------------------------------------------------------------------   
                        Send On Conversation @dialog
                            Message Type [//Contabilidad/Voucher/Mensajes/Respuesta](@message);

                        /* Finalizar Dialogo. */
                        ---------------------------------------------------------------------
                        End Conversation @dialog;
                                   
                    End Try
                    Begin Catch
                        --Error, realizar una limpieza
                        --Rollback Transaction;
                        --print error (se reflejará en los registro de errores de SQL)
                        Print 'Error Service Broker [Reca_Sp_IniciaServicioVoucher]: ' + Error_message();
                    End Catch
                End

                /*
                * Si se trata de "mensaje de fin de diálogo" o "mensaje de error"
                * Finalizar Conversacion.(end dialog).
                */           
                If @message_type_name = 'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog'
                Or @message_type_name = 'http://schemas.microsoft.com/SQL/ServiceBroker/Error'
                    Begin
                        End Conversation @dialog;
                    End;
                Else
                    Begin
                        --Tipo de mensaje no reconocido
                        Set @ErrorMsg = 'Tipo de mensaje recibido no reconocido: '
                                        + @message_type_name
                                        + Space(1) + 'Sp: [Reca_Sp_IniciaServicioVoucher]';
                                           
                        End Conversation @dialog
                        --Rollback Transaction
                        Raiserror (@ErrorMsg, 10, 1) With Log;
                    End    --Tipo de mensaje no reconocido                       
                                   
        Commit Transaction;
    End Try
    Begin Catch
        Rollback Transaction
    End Catch

End
Go

If Exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Reca_Sp_RespuestaServicios]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
Drop Procedure [dbo].[Reca_Sp_RespuestaServicios]
Go

Create Procedure [dbo].[Reca_Sp_RespuestaServicios]
As

SET NOCOUNT ON

While (1 = 1)
Begin
    --Variables Service Broker...
    Declare @dialog UNIQUEIDENTIFIER,
            @conversation_group_id UNIQUEIDENTIFIER,
            @message_body XML,
            @message_type_id Int,
            @message_type_name NVARCHAR(128);
           
    --Variables Error...
    Declare @ErrorMsg Varchar(100);


    /* Begin transaction. */
    ---------------------------------------------------------------------
    Begin Transaction

        /* Get CONVERSATION GROUP ID. */
        ---------------------------------------------------------------------
        Waitfor(
                   Get Conversation Group @conversation_group_id
                   From [dbo].[//Contabilidad/Voucher/Cola/Respuesta]
               ), Timeout 1000;

        /* Rollback transaction y salir si no hay mensajes en la cola. */
        ---------------------------------------------------------------------
        If (@@ROWCOUNT = 0)
        Begin
            Set @ErrorMsg = '[Reca_Sp_RespuestaServicios]: ROLLBACK TRANSACTION (GET CONVERSATION)'
            Raiserror (@ErrorMsg, 10, 1) With Log;            
            Rollback Transaction
            Break
        End
       
        PRINT @conversation_group_id

               
        /* Tratar a todos los mensajes de este CONVERSATION GROUP. */
        ---------------------------------------------------------------------
        WHILE (1 = 1)
        BEGIN
        /* Tratar a todos los mensajes uno a uno. */
        ---------------------------------------------------------------------

            RECEIVE
                TOP(1)
                @dialog = conversation_handle,
                @message_type_id = message_type_id, --el tipo de mensaje recibido
                @message_type_name = message_type_name,
                @message_body =
                CASE
                    WHEN validation = 'X' THEN CAST(message_body AS XML)
                    ELSE CAST(N'<none/>' AS XML)
                END
            FROM [dbo].[//Contabilidad/Voucher/Cola/Respuesta]
            WHERE conversation_group_id = @conversation_group_id ;
           
            /*
            * If there are no messages or error exists, go out from inner while.
            * Si no hay mensajes de error o que no existe, salir de interior...
            */
            ---------------------------------------------------------------------
            IF @@ROWCOUNT = 0 OR @@ERROR <> 0
            Begin
                Rollback Transaction
                Break
            End

            /* Mostrar el mensaje. */
            ---------------------------------------------------------------------
                 
                IF @message_type_name =
                    '//Contabilidad/Voucher/Cola/Respuesta'   
                    Begin           
                        Begin try
                       
                            Declare @message XML
                            Set @message =
                                            N'<RespuestaVoucher>
                                                Claudio Becerra
                                            </RespuestaVoucher>';
                       
                            -- Enviar mensaje al remitente.
                            Exec Seguridad..sp_send_mail
                                @from            = 'MonitorSQL@ParquesdeChile.cl',
                                @to                = 'Cbecerra@ParquesdeChile.cl',--Destinatario
                                @subject        = 'Creacion Servicio - Creación de Vouchers.',
                                @body            = 'Testeo',
                                @bodytype        = 'TextBody',
                                @output_mesg    = Null,
                                @output_desc    = Null;
                               
                            /* Finalizar Dialogo. */
                            ---------------------------------------------------------------------
                            End Conversation @dialog;
                                       
                        End Try
                        Begin Catch
                            --Error, realizar una limpieza
                            Rollback Transaction;
                            --print error (se reflejará en los registro de errores de SQL)
                            Print 'Error Service Broker [Reca_Sp_RespuestaServicios]: ' + Error_message();
                        End Catch
                    End

                /*
                * Si se trata de "mensaje de fin de diálogo" o "mensaje de error"
                * Finalizar Conversacion.(end dialog).
                */
                If @message_type_name = 'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog'
                Or @message_type_name = 'http://schemas.microsoft.com/SQL/ServiceBroker/Error'
                    Begin
                        End Conversation @dialog;
                    End;
                Else
                    Begin
                        --Tipo de mensaje no reconocido
                        Set @ErrorMsg = 'Tipo de mensaje recibido no reconocido: '
                                        + @message_type_name
                                        + Space(1) + 'Sp: [Reca_Sp_RespuestaServicios]';
                                           
                        End Conversation @dialog
                        Rollback Transaction
                        Raiserror (@ErrorMsg, 10, 1) With Log;
                    End    --Tipo de mensaje no reconocido                       
                                   
        End-- WHILE (1 = 1)
       
Commit Transaction
End;
Go


Viewing all articles
Browse latest Browse all 4

Latest Images

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Trending Articles


Gwapo Quotes : Babaero Quotes


Pokemon para colorear


Winx Club para colorear


Girasoles para colorear


Sapos para colorear


Vacas para colorear


Dromedario para colorear


Break up Quotes Tagalog Love Quote – Broken Hearted Quotes Tagalog


Papa Jack Tagalog Love Quotes and Advice for you


RE: Mutton Pies (mely)


Imágenes de Robin Hood para colorear


Dino Rey para colorear


Libros para colorear


Mandalas de flores para colorear


Dibujos para colorear de perros


Renos para colorear


mayabang Quotes, Torpe Quotes, tanga Quotes


Long Distance Relationship Tagalog Love Quotes


Love Quotes Tagalog


Mga Tala sa “Unang Siglo ng Nobela sa Filipinas” (2009) ni Virgilio S. Almario





Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC