Erstellen einer Remotedienstbindung

Damit Sie Nachrichten mit Service Broker austauschen können, müssen Sie den entsprechenden Benutzersicherheitskontext erstellen. Der flexibelste Ansatz ist dabei die Verwendung einer Remotedienstbindung. Durch eine Remotedienstbindung wird eine Beziehung zwischen einem lokalen Datenbankbenutzer, dem Zertifikat für den Benutzer sowie dem Namen eines Remotediensts hergestellt. Service Broker sorgt mithilfe der Remotedienstbindung für Dialogsicherheit bei Konversationen, die an den Remotedienst gerichtet sind. Diese Bindung definiert die zum Initiieren einer Konversation mit einem Remotedienst zu verwendenden Sicherheitsanmeldeinformationen.

Wird eine Konversation initiiert, überprüft Service Broker, ob eine Remotedienstbindung für den Zieldienst verfügbar ist. Steht keine Remotedienstbindung zur Verfügung, überprüft Service Broker die Routingtabelle für den Broker-Konfigurationsdienst; der Dienstname lautet SQL/ServiceBroker/BrokerConfiguration. Ist eine Route zu einem Broker-Konfigurationsdienst vorhanden, erstellt Service Broker eine neue Konversation mit dem Dienst und sendet eine Nachricht in dieser Konversation, in der das Erstellen einer Remotedienstbindung angefragt wird. Die für die Warteschlange für den Broker-Konfigurationsdienst definierte Anwendung muss dann auf die Anforderung reagieren.

HinweisHinweis

Das Verhalten ist vergleichbar mit Dynamisches Routing von Service Broker.

Anfordern einer Remotedienstbindung

Anforderungen für Remotedienstbindungen verwenden den Nachrichtentyp https://schemas.microsoft.com/SQL/ServiceBroker/BrokerConfigurationNotice/MissingRemoteServiceBinding. Die Nachricht wird im XML-Format erstellt und enthält den Namen des Diensts, für den Informationen zur Remotedienstbindung verfügbar sein sollten.

So ist beispielsweise die folgende Nachricht eine Anforderung nach einer Remotedienstbindung für den Dienst http://Adventure-Works.com/Elsewhere:

<MissingRemoteServiceBinding xmlns="https://schemas.microsoft.com/SQL/ServiceBroker/BrokerConfigurationNotice/MissingRemoteServiceBinding">
  <SERVICE_NAME>http://Adventure-Works.com/Elsewhere</SERVICE_NAME>
</MissingRemoteServiceBinding>

Die in der Warteschlange für den Broker-Konfigurationsdienst definierte Anwendung liest eine MissingRemoteServiceBinding-Nachricht aus der Warteschlange. Wenn die Anwendung den richtigen Benutzerkontext für den Zieldienst bestimmen kann, erstellt die Anwendung eine Remotedienstbindung für den Dienst und beendet dann die Konversation. Kann die Anwendung die Remotedienstbindung für den Dienst nicht bestimmen, wird die Konversation von der Anwendung mit einem Fehler beendet.

Wurde die Konversation von der Anwendung mit einem Fehler beendet, speichert Service Broker diese Reaktion zehn Minuten lang. Service Broker sendet während dieser Zeitdauer keine MissingRemoteServiceBinding-Nachricht für Dialoge mit dem Broker-Konfigurationsdienst. Wird eine Konversation nach zehn Minuten begonnen, sendet Service Broker eine andere MissingRemoteServiceBinding-Nachricht, um zu überprüfen, ob eine Remotedienstbindung erstellt wurde.

Die Anwendung beendet die Konversation in beiden Fällen. Service Broker sendet jeweils eine MissingRemoteServiceBinding-Nachricht für einen bestimmten Dienst, unabhängig von der Anzahl der Konversationen mit dem Dienst. Zudem verwendet Service Broker das am längsten mögliche Timeout für Anforderungen an den Broker-Konversationsdienst. Wenn der Broker-Konversationsdienst die Konversation nicht beendet, erstellt Service Broker somit keine neue Anforderung an den Dienst. Hat der Broker-Konversationsdienst keine Remotedienstbindung erstellt, werden sichere Nachrichten (ENCRYPTION=ON) so lange verzögert, bis die Lebensdauer der Konversation abläuft. Nicht sichere Nachrichten (ENCRYPTION=OFF) hingegen werden auch nach dem Beenden der Konversation durch den Broker-Konversationsdienst übertragen.