ROZPOCZĄĆ KONWERSACJĘ okna DIALOGOWEGO (Transact-SQL)
Rozpoczyna się okno dialogowe z jednego usługa do innego usługa.Okno dialogowe jest konwersacji, która zapewnia dokładnie once w prawidłowej kolejności wiadomości między dwiema usługami.
Składnia
BEGIN DIALOG [ CONVERSATION ] @dialog_handle
FROM SERVICE initiator_service_name
TO SERVICE 'target_service_name'
[ , { 'service_broker_guid' | 'CURRENT DATABASE' }]
[ ON CONTRACT contract_name ]
[ WITH
[ { RELATED_CONVERSATION = related_conversation_handle
| RELATED_CONVERSATION_GROUP = related_conversation_group_id } ]
[ [ , ] LIFETIME = dialog_lifetime ]
[ [ , ] ENCRYPTION = { ON | OFF } ] ]
[ ; ]
Argumenty
**@**dialog_handle
Czy zmienna jest używany do przechowywania uchwyt wygenerowane przez system w oknie dialogowym Nowe okno dialogowe jest zwracany przez rozpocząć KONWERSACJĘ okno DIALOGOWE instrukcja.Zmienna musi być typu uniqueidentifier.Z USŁUGIinitiator_service_name
Określa usługa inicjuje okna dialogowego.Określona nazwa musi być nazwą usługa w bieżącej bazie danych.Kolejka określona dla usługa inicjatora odbiera wiadomości zwróconych przez miejsce docelowe usługa i wiadomości utworzone przez Service Broker do tej konwersacji.USŁUGI 'target_service_name"
Określa miejsce docelowe usługa umożliwiające inicjowanie okna dialogowego.target_service_name Jest typu nvarchar(256).Service BrokerPorównanie bajt po bajcie używa w celu dopasowania target_service_name ciąg.Innymi słowy, wynikiem porównania jest przypadek-poufne i nie biorą pod uwagę bieżące sortowanie.service_broker_guid
Określa miejsce docelowe usługabazy danych.Gdy więcej niż jedna baza danych obsługuje wystąpienie miejsce docelowe usługa, można komunikować się z konkretnej bazy danych przez zapewnienie service_broker_guid.service_broker_guid Jest typu nvarchar(128).Aby znaleźć service_broker_guid dla bazy danych, uruchom następującą kwerendę bazy danych:
SELECT service_broker_guid FROM sys.databases WHERE database_id = DB_ID() ;
Aby uzyskać więcej informacji o Service Broker tożsamości, zobacz Zarządzanie Service Broker tożsamości.
"BIEŻĄCEJ bazy danych'
Określa, że konwersacji za pomocą service_broker_guid dla bieżącej bazy danych.UMOWY NAcontract_name
Określa kontrakt , występujący w tej konwersacji.kontrakt muszą istnieć w bieżącej bazie danych.Jeśli miejsce docelowe usługa nie akceptuje konwersacji nowego kontrakt określono, Service Broker zwraca komunikat o błędzie w konwersacji.Jeżeli pominięto tej klauzula konwersacji następuje kontrakt o nazwie domyślne.RELATED_CONVERSATION **=**related_conversation_handle
Określa istniejącej grupa konwersacji dodaje się nowe okno dialogowe.Podczas tej klauzula jest obecny, nowe okno dialogowe należy do tej samej grupa konwersacji jako okno dialogowe określonej przez related_conversation_handle.related_conversation_handleMusi być typu niejawnie konwertowane na typ uniqueidentifier.instrukcja nie powiedzie się, jeśli related_conversation_handle nie odwołuje się istniejące okno dialogowe.RELATED_CONVERSATION_GROUP **=**related_conversation_group_id
Określa istniejącej grupa konwersacji dodaje się nowe okno dialogowe.Podczas tej klauzula jest obecny, nowe okno dialogowe zostanie dodany do grupa konwersacji , określonej przez related_conversation_group_id.related_conversation_group_idMusi być typu niejawnie konwertowane na typ uniqueidentifier.Jeśli related_conversation_group_idjest odwołanie istniejącej grupa konwersacji, usługa broker tworzy nową grupa konwersacji o określonym related_conversation_group_id i odnosi się nowe okno dialogowe grupa konwersacji.Okres istnienia **=**dialog_lifetime
Określa maksymalną ilość czas , okno dialogowe pozostanie otwarte.W oknie dialogowym, aby zakończyć się pomyślnie oba punkty końcowe muszą jawnie zakończyć okna dialogowego przed upływem okresu istnienia.dialog_lifetime Wartość musi być wyrażony w sekundach.Okres istnienia jest typu int.Po określeniu nie istnienia klauzula istnienia okno dialogowe jest maksymalna wartość int typu danych.SZYFROWANIE
Określa, czy wiadomości wysłanych i odebranych w tym oknie dialogowym musi być zaszyfrowany, gdy są wysyłane poza z wystąpienie Microsoft SQL Server.Okno dialogowe, które muszą być zaszyfrowane jest dialogowe zabezpieczonej.Podczas szyfrowania = ON i certyfikaty wymagane do obsługi szyfrowanie nie są skonfigurowane, Service Broker zwraca komunikat o błędzie w konwersacji.Jeśli SZYFROWANIE = OFF, używane jest szyfrowanie , jeśli usługazdalnegopowiązanie jest skonfigurowane dla target_service_name; w przeciwnym wypadku wiadomości są wysyłane niezaszyfrowane.Jeśli nie ma tej klauzula , wartością domyślną jest włączone.Aby uzyskać więcej informacji na temat okna dialogowego zabezpieczeń, zobacz Service Broker okna dialogowego zabezpieczeń.Ostrzeżenie
Komunikaty wymieniane z usług w tej samej wystąpienie SQL Server nigdy nie są szyfrowane.Jednak wzorca bazy danych klucz i certyfikaty szyfrowanie są nadal wymagane dla konwersacji, które szyfrowanie .Dzięki temu konwersacji kontynuować w zdarzenie , że jeden z baz danych jest przenoszony do innego wystąpienie w trakcie konwersacji.
Uwagi
Wszystkie wiadomości są częścią konwersacji.Dlatego inicjujący usługa musi rozpocząć konwersację z miejsce docelowe usługa przed wysłaniem wiadomości do miejsce docelowe usługa.Informacje określone w instrukcja rozpocząć KONWERSACJĘ okno DIALOGOWE przypomina adres na list; Service Brokerużywa informacji dostarczania wiadomości do poprawna usługa.usługa określonych w klauzula do usługi jest adres wiadomości są wysyłane do.usługa , określone w usługi z klauzula jest adres zwrotny dla wiadomości odpowiedzi.
miejsce docelowe konwersacji nie trzeba wywołać rozpocząć KONWERSACJĘ okna DIALOGOWEGO.Service BrokerTworzy konwersację w miejsce docelowe bazie danych po odebraniu pierwszej wiadomości w konwersacji z inicjatora.
Począwszy od okna dialogowego tworzy punkt końcowy konwersacji w bazie danych dla inicjujący usługa, ale nie tworzy połączenie sieciowe do wystąpienie miejsce docelowe usługa.Service Brokernie ustanawia komunikację z miejsce docelowe okna dialogowego, aż do pierwszej wiadomości jest wysyłana.
Gdy rozpocząć KONWERSACJĘ okno DIALOGOWE instrukcja nie określi pokrewne konwersacji lub powiązane grupa konwersacji Service Broker tworzy nową grupa konwersacji dla nowych konwersacji.
Service Brokernie zezwala na dowolnego grupowanie konwersacji.Wszystkie konwersacje w grupa konwersacji musi mieć usługa określone w klauzula FROM jako inicjatora lub miejsce docelowe konwersacji.
Polecenie Rozpocznij KONWERSACJĘ okno DIALOGOWE blokuje grupa konwersacji , która zawiera dialog_handle zwrócił.Gdy polecenie zawiera RELATED_CONVERSATION_GROUP klauzula, do grupa konwersacji dialog_handle jest grupa konwersacji określonej w related_conversation_group_id parametru.Gdy polecenie zawiera RELATED_CONVERSATION klauzula, do grupa konwersacji dialog_handle grupa konwersacji skojarzone z related_conversation_handle określonego.
ROZPOCZĄĆ KONWERSACJĘ okno DIALOGOWE nie jest prawidłowy w zdefiniowanej przez użytkownika funkcja.
Uprawnienia
Aby rozpocząć okno dialogowe, bieżącego użytkownika musi mieć uprawnienie ODBIERANIE dla kolejki usługa określone w FROM klauzula polecenia i uprawnienie odniesienia dla kontrakt określony.
Przykłady
A.Począwszy od okna dialogowego
Poniższy skrypt zaczyna się konwersacja okno dialogowe i zapisuje identyfikator dla okna dialogowego w @dialog_handle.//Adventure-Works.com/ExpenseClient usługa jest inicjatora dla okna dialogowego i //Adventure-Works.com/Expenses usługa jest miejsce docelowe okna dialogowego.Okno dialogowe następuje kontrakt //Adventure-Works.com/Expenses/ExpenseSubmission.
DECLARE @dialog_handle UNIQUEIDENTIFIER ;
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE [//Adventure-Works.com/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseSubmission] ;
B.Rozpoczynające się okno dialogowe z istnienia wyraźnej
Poniższy skrypt zaczyna się konwersacja okno dialogowe i zapisuje identyfikator dla okna dialogowego w @dialog_handle.//Adventure-Works.com/ExpenseClientusługa jest inicjatora dla okna dialogowego i //Adventure-Works.com/Expensesusługa jest miejsce docelowe okna dialogowego. Okno dialogowe następuje kontrakt //Adventure-Works.com/Expenses/ExpenseSubmission.Jeśli okno dialogowe nie zostały zamknięte przez polecenie zakończenia KONWERSACJI w 60 sekund, brokera kończy się okno dialogowe z błąd.
DECLARE @dialog_handle UNIQUEIDENTIFIER ;
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE [//Adventure-Works.com/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseSubmission]
WITH LIFETIME = 60 ;
C.Okno dialogowe począwszy od broker określone wystąpienie
Poniższy skrypt zaczyna się konwersacja okno dialogowe i zapisuje identyfikator dla okna dialogowego w @dialog_handle.//Adventure-Works.com/ExpenseClientusługa jest inicjatora dla okna dialogowego i //Adventure-Works.com/Expensesusługa jest miejsce docelowe okna dialogowego. Okno dialogowe następuje kontrakt //Adventure-Works.com/Expenses/ExpenseSubmission.Broker wiadomości tras w tym oknie dialogowym do broker identyfikowane przez identyfikator GUIDa326e034-d4cf-4e8b-8d98-4d7e1926c904.
DECLARE @dialog_handle UNIQUEIDENTIFIER ;
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE [//Adventure-Works.com/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses',
'a326e034-d4cf-4e8b-8d98-4d7e1926c904'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseSubmission] ;
D.Począwszy od okna dialogowego, a dotyczących istniejącej grupa konwersacji
Poniższy skrypt zaczyna się konwersacja okno dialogowe i zapisuje identyfikator dla okna dialogowego w @dialog_handle.//Adventure-Works.com/ExpenseClientusługa jest inicjatora dla okna dialogowego i //Adventure-Works.com/Expensesusługa jest miejsce docelowe okna dialogowego. Okno dialogowe następuje kontrakt //Adventure-Works.com/Expenses/ExpenseSubmission.Brokera kojarzy okna dialogowego z grupa konwersacji , identyfikowanej przez @conversation_group_id zamiast tworzenia nowej grupa konwersacji.
DECLARE @dialog_handle UNIQUEIDENTIFIER ;
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
SET @conversation_group_id = <retrieve conversation group ID from database>
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE [//Adventure-Works.com/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseSubmission]
WITH RELATED_CONVERSATION_GROUP = @conversation_group_id ;
E.Rozpoczynające się okno dialogowe z istnienia wyraźnej i odnoszących się do okna dialogowego do istniejącej konwersacji
Poniższy skrypt zaczyna się konwersacja okno dialogowe i zapisuje identyfikator dla okna dialogowego w @dialog_handle.//Adventure-Works.com/ExpenseClientusługa jest inicjatora dla okna dialogowego i //Adventure-Works.com/Expensesusługa jest miejsce docelowe okna dialogowego. Okno dialogowe następuje kontrakt //Adventure-Works.com/Expenses/ExpenseSubmission.Nowe okno dialogowe, należy do tej samej grupa konwersacji , @existing_conversation_handle należy do.Jeśli okno dialogowe nie zostały zamknięte przez polecenie zakończenia KONWERSACJI w 600 sekund, Service Broker kończy się okno dialogowe z błędu.
DECLARE @dialog_handle UNIQUEIDENTIFIER
DECLARE @existing_conversation_handle UNIQUEIDENTIFIER
SET @existing_conversation_handle = <retrieve conversation handle from database>
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE [//Adventure-Works.com/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseSubmission]
WITH RELATED_CONVERSATION = @existing_conversation_handle
LIFETIME = 600 ;
F.Rozpoczynające się okno dialogowe z szyfrowanieopcjonalne
Poniższy skrypt zaczyna się okno dialogowe i zapisuje identyfikator dla okna dialogowego w @dialog_handle.//Adventure-Works.com/ExpenseClientusługa jest inicjatora dla okna dialogowego i //Adventure-Works.com/Expensesusługa jest miejsce docelowe okna dialogowego. Okno dialogowe następuje kontrakt //Adventure-Works.com/Expenses/ExpenseSubmission.Konwersacja w tym przykładzie umożliwia wiadomości przesyłane przez sieć bez szyfrowanie , jeśli szyfrowanie nie jest dostępne.
DECLARE @dialog_handle UNIQUEIDENTIFIER
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE [//Adventure-Works.com/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseSubmission]
WITH ENCRYPTION = OFF ;