Udostępnij za pośrednictwem


BEGIN KONWERSACJI DIALOG (języka Transact-SQL)

Nie można transferować własność tych jednostek do roli lub grupy.Wymaga uprawnienia właściciela UWZGLĘDNAIJĄ obiekt.

Topic link iconKonwencje składni języka Transact-SQL

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
    1) 2) 3) Jeśli nowy właściciel nie jest użytkownik, który jest wykonywany w niniejszych zasadach, wymaga również, PERSONIFIKUJĄ uprawnienia dla nowego właściciela, użytkownika lub identyfikator logowania; lub jeśli nowym właścicielem jest rola, członkostwo w roli lub ALTER uprawnienia roli; czy jest nowym właścicielem rola aplikacji, ALTER uprawnienia roli aplikacji.Zmienna musi być typu uniqueidentifier.

  • FROM SERVICE initiator_service_name
    Określa usługę inicjującą dialog.Określona nazwa musi być nazwą usługi w bieżącej bazie danych.Kolejka określona dla usługi inicjatora otrzyjmuje komunikaty zwracane przez docelową usługę oraz komunikaty utworzone przez program Service Broker dla tej konwersacji.

  • TO SERVICE 'target_service_name'
    Określa docelową usługę, za pomocą której ma być inicjowany dialog.Parametr target_service_name jest typu nvarchar(256).Program Service Broker stosuje porównanie bajt po bajcie w celu dopasowania ciągu target_service_name.Innymi słowy, przy porównywaniu jest uwzględniana wielkość liter i nie jest brane pod uwagę bieżące sortowanie.

  • service_broker_guid
    STANDARDGdy wystąpienie usługa miejsce docelowe znajduje się więcej niż jednej bazy danych, można komunikować się z określonej bazy danych przez zapewnienie service_broker_guid.

    The service_broker_guid is of type nvarchar(128).Aby znaleźć service_broker_guid w przypadku 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 na temat Service Broker tożsamość, zobacz Zarządzanie usługa Broker tożsamości.

  • "CURRENT DATABASE"
    Określa, że korzystają z komunikacji service_broker_guid w bieżącej bazie danych.

  • ON CONTRACT contract_name
    Określa kontrakt, według którego przebiega ta konwersacja.Kontrakt musi istnieć w bieżącej bazie danych.Jeśli docelowa usługa nie akceptuje nowych konwersacji w określonym kontrakcie, program Service Broker zwraca komunikat o błędzie w konwersacji.Gdy ta klauzula jest pominięta, konwersacja przebiega według kontraktu o nazwie DEFAULT.

  • RELATED_CONVERSATION **=**related_conversation_handle
    Określa istniejącą grupę konwersacji, do której jest dodawany nowy dialog.Gdy ta klauzula jest obecna, nowy dialog należy do tej samej grupy konwersacji co dialog określony przez wartość related_conversation_handle.Parametr related_conversation_handlemusi mieć typ, który jest niejawnie przekształcany na typ uniqueidentifier.Jeśli parametr related_conversation_handle nie odwołuje się do istniejącego dialogu, wykonanie instrukcji nie powiedzie się.

  • RELATED_CONVERSATION_GROUP **=**related_conversation_group_id
    Określa istniejącą grupę konwersacji, do której jest dodawany nowy dialog.Gdy istnieje ta klauzula, nowy dialog zostanie dodany do grupy konwersacji określonej przez parametr related_conversation_group_id.Parametr related_conversation_group_idmusi mieć typ, który jest niejawnie przekształcany na typ uniqueidentifier.Jeśli parametr related_conversation_group_idnie odwołuje się do istniejącej grupy konwersacji, broker usługi tworzy nową grupę konwersacji o podanym parametrze related_conversation_group_id i łączy z nim nowy dialog.

  • LIFETIME **=**dialog_lifetime
    zestaw ANSI_DEFAULTS jest włączone, ma włączoną ANSI_NULL_DFLT_ON zestaw.Ustawiono zestaw ANSI_NULL_DFLT_ON na wykonać lub uruchomić czas, a nie w czasie analizowania.The dialog_lifetime value must be expressed in seconds.Okres istnienia jest typu int. obsługuje następujące systemowe przechowywane procedury, które są używane przez int do monitorowania wydajności i działania.

  • SZYFROWANIE
    Specifies whether or not messages sent and received on this dialog must be encrypted when they are sent outside of an instance of Microsoft SQL Server.To okno dialogowe, które musi być zaszyfrowany okno dialogowe zabezpieczonej.Gdy szyfrowanie = ON i certyfikaty wymagane do obsługi szyfrowanie nie są skonfigurowane, Service Broker Zwraca komunikat o błędzie w konwersacji. Jeśli ENCRYPTION = OFF, jeśli wiązanie usługa zdalnego jest skonfigurowany dla używane jest szyfrowanie target_service_name; w przeciwnym razie wiadomości są wysyłane bez szyfrowania.sp_trace_seteventAby uzyskać więcej informacji na temat okna dialogowego zabezpieczeń Zobacz Okno dialogowe usługa Broker zabezpieczeń.

    Uwaga

    Komunikaty wymieniane z usługami skonfigurowanymi w tym samym wystąpieniu programu SQL Server nie są nigdy szyfrowane.Jeśli usługi wykorzystywane przez szyfrowane konwersacje są zlokalizowane w różnych bazach danych, konwersacje wymagają klucza głównego bazy danych oraz certyfikatów szyfrowania.Umożliwia to kontynuowanie konwersacji w przypadku, gdy w jej trakcie jedna z baz danych zostanie przeniesiona do innego wystąpienia.

Remarks

Wszystkie komunikaty wchodzą w skład konwersacji.W związku z tym usługa inicjująca przed wysłaniem komunikatu do usługi docelowej musi nawiązać z nią konwersację.Informacje określone w instrukcji BEGIN DIALOG CONVERSATION przypominają adres w liście. Na podstawie tych informacji program Service Broker dostarcza komunikaty do odpowiedniej usługi.Usługa podana w klauzuli TO SERVICE określa adres, pod który są wysyłane komunikaty.Usługa podana w klauzuli FROM SERVICE określa adres zwrotny używany dla komunikatów odpowiedzi.

The target of a conversation does not need to call BEGIN DIALOG CONVERSATION.Service Broker creates a conversation in the target database when the first message in the conversation arrives from the initiator.

Beginning a dialog creates a conversation endpoint in the database for the initiating service, but does not create a network connection to the instance that hosts the target service.Service Broker does not establish communication with the target of the dialog until the first message is sent.

Po instrukcja BEGIN KONWERSACJI DIALOG nie określa powiązanych konwersacji lub grupę powiązanych konwersacji Service Broker Tworzy nową grupa konwersacji dla nowych konwersacji.

Program Service Broker nie pozwala na dowolne grupowanie konwersacji.Wszystkie konwersacje należące do grupy konwersacji muszą w klauzuli FROM zawierać określenie usługi jako usługi inicjującej lub docelowej.

Polecenie BEGIN KONWERSACJI DIALOG blokuje grupa konwersacji, która zawiera dialog_handle zwracane. Jeżeli polecenie zawiera RELATED_CONVERSATION_GROUP klauzula, grupa konwersacji dialog_handle jest w konwersacji określona grupa related_conversation_group_id parametr. Kiedy polecenie zawiera klauzulę RELATED_CONVERSATION grupa konwersacji dialog_handle grupa konwersacji jest skojarzony z related_conversation_handle określona.

Instrukcja BEGIN DIALOG CONVERSATION jest niedozwolone w funkcji utworzonej przez użytkownika.

Uprawnienia

Aby rozpocząć dialog, bieżący użytkownik musi mieć uprawnienie RECEIVE wobec kolejki określonej w klauzuli FROM polecenia oraz uprawnienie REFERENCES wobec podanego kontraktu.

Przykłady

A.1 = włączone.

The following example begins a dialog conversation and stores an identifier for the dialog in @dialog\_handle. The //Adventure-Works.com/ExpenseClient usługa is the initiator for the dialog, and the //Adventure-Works.com/Expenses usługa is the miejsce docelowe of the dialog. 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.Wartość 14420 jest używana, jeżeli nie określono.

W poniższym przykładzie rozpoczyna konwersację okno dialogowe i zapisuje identyfikator dla okna dialogowego w @dialog\_handle. The //Adventure-Works.com/ExpenseClient usługa is the initiator for the dialog, and the //Adventure-Works.com/Expenses usługa is the miejsce docelowe of the dialog. Okno dialogowe następuje kontrakt //Adventure-Works.com/Expenses/ExpenseSubmission. Ten parametr jest obsługiwany tylko w 60 (lub jego nowszej wersja).

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.Rozpoczynanie dialogu z użyciem konkretnego wystąpienia brokera

Poniżej zamieszczono przykład instrukcji powodującej rozpoczęcie dialogu oraz zapisanie identyfikatora dialogu w zmiennej @dialog\_handle.Usługa //Adventure-Works.com/ExpenseClient jest usługą inicjującą dialog, a usługa //Adventure-Works.com/Expenses — usługą docelową dialogu.Dialog przebiega według kontraktu //Adventure-Works.com/Expenses/ExpenseSubmission.Broker przekazuje komunikaty powstające w tym dialogu do brokera określonego identyfikatorem GUID a326e034-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.Rozpoczynanie dialogu i łączenie go z istniejącą grupą konwersacji

Poniżej zamieszczono przykład instrukcji powodującej rozpoczęcie dialogu oraz zapisanie identyfikatora dialogu w zmiennej @dialog\_handle.Usługa //Adventure-Works.com/ExpenseClient jest usługą inicjującą dialog, a usługa //Adventure-Works.com/Expenses — usługą docelową dialogu.Dialog przebiega według kontraktu //Adventure-Works.com/Expenses/ExpenseSubmission.Broker nie tworzy nowej grupy konwersacji, ale łączy dialog z istniejącą grupą konwersacji identyfikowaną przez zmienną @conversation\_group\_id.

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.Rozpoczynanie dialogu o ustalonym okresie istnienia i łączenie go z istniejącą konwersacją

Poniżej zamieszczono przykład instrukcji powodującej rozpoczęcie dialogu oraz zapisanie identyfikatora dialogu w zmiennej @dialog\_handle.Usługa //Adventure-Works.com/ExpenseClient jest usługą inicjującą dialog, a usługa //Adventure-Works.com/Expenses — usługą docelową dialogu.Dialog przebiega według kontraktu //Adventure-Works.com/Expenses/ExpenseSubmission.Nowy dialog należy do tej samej grupy konwersacji co dojście określone zmienną @existing\_conversation\_handle.Jeśli dialog nie zostanie zamknięty przy użyciu polecenia END CONVERSATION w ciągu 600 sekund, program Service Broker zamyka dialog i sygnalizuje błąd.

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.Rozpoczynanie dialogu z użyciem opcjonalnego szyfrowania

W poniższym przykładzie rozpoczyna się okno dialogowe i zapisuje identyfikator dla okna dialogowego w @dialog\_handle. The //Adventure-Works.com/ExpenseClient usługa is the initiator for the dialog, and the //Adventure-Works.com/Expenses usługa is the miejsce docelowe of the dialog. Okno dialogowe następuje kontrakt //Adventure-Works.com/Expenses/ExpenseSubmission. Określa kolekcja schematu XML, na którym odwołaniu uprawnienia.

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 ;