Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
Maakt een nieuw contract aan. Een contract definieert de berichttypes die worden gebruikt in een Service Broker-gesprek en bepaalt ook welke kant van het gesprek berichten van dat type kan verzenden. Elk gesprek volgt een contract. De initiatieve dienst specificeert het contract voor het gesprek wanneer het gesprek begint. De doeldienst specificeert de contracten waarvoor de doeldienst gesprekken accepteert.
Transact-SQL syntaxis-conventies
Syntax
CREATE CONTRACT contract_name
[ AUTHORIZATION owner_name ]
( { { message_type_name | [ DEFAULT ] }
SENT BY { INITIATOR | TARGET | ANY }
} [ ,...n] )
[ ; ]
Arguments
contract_name
Is de naam van het contract om op te stellen. Er wordt een nieuw contract aangemaakt in de huidige database en eigendom van de in de AUTHORIZATION clausule gespecificeerde opdrachtgever. Server-, database- en schemanamen kunnen niet worden gespecificeerd. De contract_name kan tot 128 tekens zijn.
Note
Maak geen contract aan dat het trefwoord ANY gebruikt voor de contract_name. Wanneer je ELKE voor een contractnaam specificeert in CREATE BROKER PRIORITY, wordt de prioriteit voor alle contracten meegenomen. Het is niet beperkt tot een contract waarvan de naam ELKE is.
AUTHORIZATION
owner_name
Stelt de eigenaar van het contract in op de gespecificeerde databasegebruiker of rol. Wanneer de huidige gebruiker dbo of sa is, kan owner_name de naam zijn van elke geldige gebruiker of rol. Anders moet owner_name de naam zijn van de huidige gebruiker, de naam van een gebruiker waarvoor de huidige gebruiker impersonate-rechten heeft, of de naam van een rol waartoe de huidige gebruiker behoort. Wanneer deze clausule wordt weggelaten, behoort het contract toe aan de huidige gebruiker.
message_type_name
Is de naam van een berichttype dat als onderdeel van het contract moet worden opgenomen?
VERZONDEN DOOR
Geeft aan welk eindpunt een bericht van het aangegeven berichttype kan verzenden. Contracten documenteren de boodschappen die diensten kunnen gebruiken om specifieke gesprekken te voeren. Elk gesprek heeft twee eindpunten: het initiator-eindpunt , de service die het gesprek begon, en het doel-eindpunt , de service waarmee de initiator contact opneemt.
INITIATOR
Geeft aan dat alleen de initiator van het gesprek berichten van het opgegeven berichttype kan verzenden. Een dienst die een gesprek begint, wordt aangeduid als de initiatief van het gesprek.
DOEL
Geeft aan dat alleen het doelwit van het gesprek berichten van het opgegeven berichttype kan verzenden. Een dienst die een gesprek accepteert dat door een andere dienst is gestart, wordt aangeduid als het doelwit van het gesprek.
ANY
Geeft aan dat berichten van dit type zowel door de initiator als het doel kunnen worden verzonden.
[ DEFAULT ]
Geeft aan dat dit contract berichten van het standaardberichttype ondersteunt. Standaard bevatten alle databases een berichttype genaamd DEFAULT. Dit berichttype gebruikt een validatie van GEEN. In de context van deze clausule DEFAULT is geen sleutelwoord en moet het worden afgebakend als een identificatie. Microsoft SQL Server biedt ook een DEFAULT contract dat het DEFAULT berichttype specificeert.
Remarks
De volgorde van berichttypes in het contract is niet significant. Nadat het doelwit het eerste bericht heeft ontvangen, staat Service Broker toe dat beide partijen elk toegestaan bericht voor die kant van het gesprek op elk moment kunnen versturen. Als bijvoorbeeld de initiator van het gesprek het berichttype Adventure-Works.com/Expenses/SubmitExpense kan sturen, staat Service Broker de initiator toe om een willekeurig aantal SubmitExpense-berichten te sturen tijdens het gesprek.
De berichttypes en instructies in een contract kunnen niet worden gewijzigd. Om het voor AUTHORIZATION een contract te wijzigen, gebruik je de ALTER AUTHORIZATION verklaring.
Een contract moet de initiator in staat stellen een boodschap te sturen. De CREATE CONTRACT instructie faalt wanneer het contract niet ten minste één berichttype bevat dat VERZONDEN DOOR EEN of VERZONDEN DOOR INITIATOR is.
Ongeacht het contract kan een dienst altijd de berichttypes https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer, https://schemas.microsoft.com/SQL/ServiceBroker/Error, en https://schemas.microsoft.com/SQL/ServiceBroker/EndDialogontvangen. Service Broker gebruikt deze berichttypen voor systeemberichten naar de applicatie.
Een contract kan geen tijdelijk object zijn. Contractnamen die met # beginnen zijn toegestaan, maar zijn permanente objecten.
Permissions
Standaard kunnen leden van de db_ddladmin of db_owner vaste databaserollen en de sysadmin vaste serverrol contracten aanmaken.
Standaard hebben de eigenaar van het contract, leden van de db_ddladmin - of db_owner vaste databaserollen, en leden van de sysadmin-vaste serverrol de REFERENTIES-toestemming op een contract.
De gebruiker die de instructie uitvoert CREATE CONTRACT , moet REFERENTIES-toestemming hebben voor alle gespecificeerde berichttypen.
Examples
A. Een contract opstellen
Het volgende voorbeeld maakt een onkostenvergoedingscontract op basis van drie berichttypen.
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/SubmitExpense]
VALIDATION = WELL_FORMED_XML ;
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/ExpenseApprovedOrDenied]
VALIDATION = WELL_FORMED_XML ;
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/ExpenseReimbursed]
VALIDATION= WELL_FORMED_XML ;
CREATE CONTRACT
[//Adventure-Works.com/Expenses/ExpenseSubmission]
( [//Adventure-Works.com/Expenses/SubmitExpense]
SENT BY INITIATOR,
[//Adventure-Works.com/Expenses/ExpenseApprovedOrDenied]
SENT BY TARGET,
[//Adventure-Works.com/Expenses/ExpenseReimbursed]
SENT BY TARGET
) ;
Zie ook
DROP CONTRACT (Transact-SQL)
EVENTDATA (Transact-SQL)