Hallo zusammen
Ich beschäftige mich seit gestern mit den Service Brokern und brauche eure Hilfe!
Herausforderung:
Sobald der Wert eines Datenfeldes einen bestimmten Wert annimmt sollen verschiedene Werte der gleichen Datenbank automatisch in ein PDF gedruckt werden.
Also entschied ich mich für folgenden Weg:
SQL --> Trigger --> VB-Script --> Crystal Reports --> PDF
Also eingentlich lief alles aber was passierte dann:
Weil der Triger synchron läuft gabs ein Deadlock ;-)
Crystal Reports will aus der gleichen Datenbank lesen auf der gerade der Trigger läuft! --> Die Datenbank hängt!
Also möchte ich nun das ganze mit nem Service Broker machen:
SQL --> Trigger --> Service Broker --> VB-Script --> Crystal Reports --> PDF
Somit sollte der Zugriff von Crystal Reports erfolgen "nachdem" der Trigger beendet wurde ...
Habe mir dann mal zum Einstieg folgenden Service Broker kopiert aber ich empfange keine Daten:
http://www.codeguru.com/cpp/data/mfc...ice-Broker.htm
USE db-sandbox
GO
-----------------------------------------------------
IF EXISTS (SELECT * FROM sys.services WHERE name = 'StockSendService') DROP SERVICE StockSendService
IF EXISTS (SELECT * FROM sys.services WHERE name = 'StockReceiveService') DROP SERVICE StockReceiveService
IF EXISTS (SELECT * FROM sys.service_contracts WHERE name = 'StockContract') DROP CONTRACT StockContract
IF EXISTS (SELECT * FROM sys.service_message_types WHERE name = 'StockMessage') DROP MESSAGE TYPE StockMessage
IF EXISTS (SELECT * FROM sys.service_queues WHERE name = 'StockSendQueue') DROP QUEUE StockSendQueue
IF EXISTS (SELECT * FROM sys.service_queues WHERE name = 'StockReceiveQueue') DROP QUEUE StockReceiveQueue
-----------------------------------------------------
CREATE MESSAGE TYPE StockMessage
VALIDATION = NONE
CREATE CONTRACT StockContract
(StockMessage SENT BY INITIATOR)
CREATE QUEUE StockSendQueue
CREATE QUEUE StockReceiveQueue
CREATE SERVICE StockSendService
ON QUEUE StockSendQueue (StockContract)
CREATE SERVICE StockReceiveService
ON QUEUE StockReceiveQueue (StockContract)
GO
-----------------------------------------------------
DECLARE @StockDialog uniqueidentifier
DECLARE @Message nvarchar(128)
BEGIN DIALOG CONVERSATION @StockDialog
FROM SERVICE StockSendService
TO SERVICE 'StockReceiveService'
ON CONTRACT StockContract
WITH ENCRYPTION = OFF
SET @Message = N'Add 12 widgets to inventory';
SEND ON CONVERSATION @StockDialog
MESSAGE TYPE StockMessage (@Message)
SET @Message = N'Remove 4 springs from inventory';
SEND ON CONVERSATION @StockDialog
MESSAGE TYPE StockMessage (@Message)
SET @Message = N'Add 7 twonkies to inventory';
SEND ON CONVERSATION @StockDialog
MESSAGE TYPE StockMessage (@Message);
GO
------------------------------------------------------------------
RECEIVE CONVERT(NVARCHAR(max), message_body) AS message
FROM StockReceiveQueue
GO
------------------------------------------------------------------
Also der Quellcode läuft ohne Fehlermeldung aber die Ausgabe "message" bleibt leer! Die Daten werden wohl in die Queue gesteckt aber ich empfange Sie nicht.
Wer weiß weiter?
Schonmal Danke fürs Helfen
Christian
Ich beschäftige mich seit gestern mit den Service Brokern und brauche eure Hilfe!
Herausforderung:
Sobald der Wert eines Datenfeldes einen bestimmten Wert annimmt sollen verschiedene Werte der gleichen Datenbank automatisch in ein PDF gedruckt werden.
Also entschied ich mich für folgenden Weg:
SQL --> Trigger --> VB-Script --> Crystal Reports --> PDF
Also eingentlich lief alles aber was passierte dann:
Weil der Triger synchron läuft gabs ein Deadlock ;-)
Crystal Reports will aus der gleichen Datenbank lesen auf der gerade der Trigger läuft! --> Die Datenbank hängt!
Also möchte ich nun das ganze mit nem Service Broker machen:
SQL --> Trigger --> Service Broker --> VB-Script --> Crystal Reports --> PDF
Somit sollte der Zugriff von Crystal Reports erfolgen "nachdem" der Trigger beendet wurde ...
Habe mir dann mal zum Einstieg folgenden Service Broker kopiert aber ich empfange keine Daten:
http://www.codeguru.com/cpp/data/mfc...ice-Broker.htm
USE db-sandbox
GO
-----------------------------------------------------
IF EXISTS (SELECT * FROM sys.services WHERE name = 'StockSendService') DROP SERVICE StockSendService
IF EXISTS (SELECT * FROM sys.services WHERE name = 'StockReceiveService') DROP SERVICE StockReceiveService
IF EXISTS (SELECT * FROM sys.service_contracts WHERE name = 'StockContract') DROP CONTRACT StockContract
IF EXISTS (SELECT * FROM sys.service_message_types WHERE name = 'StockMessage') DROP MESSAGE TYPE StockMessage
IF EXISTS (SELECT * FROM sys.service_queues WHERE name = 'StockSendQueue') DROP QUEUE StockSendQueue
IF EXISTS (SELECT * FROM sys.service_queues WHERE name = 'StockReceiveQueue') DROP QUEUE StockReceiveQueue
-----------------------------------------------------
CREATE MESSAGE TYPE StockMessage
VALIDATION = NONE
CREATE CONTRACT StockContract
(StockMessage SENT BY INITIATOR)
CREATE QUEUE StockSendQueue
CREATE QUEUE StockReceiveQueue
CREATE SERVICE StockSendService
ON QUEUE StockSendQueue (StockContract)
CREATE SERVICE StockReceiveService
ON QUEUE StockReceiveQueue (StockContract)
GO
-----------------------------------------------------
DECLARE @StockDialog uniqueidentifier
DECLARE @Message nvarchar(128)
BEGIN DIALOG CONVERSATION @StockDialog
FROM SERVICE StockSendService
TO SERVICE 'StockReceiveService'
ON CONTRACT StockContract
WITH ENCRYPTION = OFF
SET @Message = N'Add 12 widgets to inventory';
SEND ON CONVERSATION @StockDialog
MESSAGE TYPE StockMessage (@Message)
SET @Message = N'Remove 4 springs from inventory';
SEND ON CONVERSATION @StockDialog
MESSAGE TYPE StockMessage (@Message)
SET @Message = N'Add 7 twonkies to inventory';
SEND ON CONVERSATION @StockDialog
MESSAGE TYPE StockMessage (@Message);
GO
------------------------------------------------------------------
RECEIVE CONVERT(NVARCHAR(max), message_body) AS message
FROM StockReceiveQueue
GO
------------------------------------------------------------------
Also der Quellcode läuft ohne Fehlermeldung aber die Ausgabe "message" bleibt leer! Die Daten werden wohl in die Queue gesteckt aber ich empfange Sie nicht.
Wer weiß weiter?
Schonmal Danke fürs Helfen
Christian
Comment