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.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

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 ;