Reservieren eines HTTP-Namespace

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.

Das Reservieren eines HTTP-Namespaces für die Verwendung mit einer Instanz von SQL Server kann mithilfe einer impliziten Reservierung (wenn Sie z. B. CREATE ENDPOINT verwenden) oder einer expliziten Reservierung mithilfe der gespeicherten Prozedur sp_reserve_http_namespace ausgeführt werden.

URL-Namespaces werden aus folgenden Gründen reserviert:

  • Wenn eine Anwendung mit einem Nichtadministratorkonto ausgeführt wird, kann sie keine Bindung an den Namespace zur Laufzeit durchführen, ohne dass ein Administrator eine Reservierung des Namespaces vornimmt. Diese Anforderung geht auf den Kernelmodus-HTTP-Treiber (Http.sys) zurück.

    Die einzige Ausnahme dieser Regel liegt vor, wenn die Anwendung unter dem lokalen Systemkonto ausgeführt wird. Anwendungen, die unter dem lokalen Systemkonto ausgeführt werden, können einen beliebigen Namespace binden, wenn dieser frei ist. Selbst wenn die Anwendung unter dem lokalen Systemkonto ausgeführt wird, wird eine Reservierung der Namespaces aus folgenden Gründen empfohlen.

  • Das Reservieren eines Namespaces stellt sicher, dass andere Anwendungen keine Bindung herstellen können; die Anwendung ist daher der alleinige Besitzer des Namespaces.

    Wenn eine Instanz von SQL Server z. B. unter dem lokalen Systemkonto ausgeführt wird, ist das Reservieren von Namespaces nicht erforderlich, wird jedoch empfohlen, um Anwendungskonflikte hinsichtlich URLs zu verhindern.

Die Reservierung von Namespaces erfolgt hierarchisch. Wenn z. B. der Namespace http://adventure-works.com:80/ reserviert ist, gilt dies auch für alle untergeordneten Namespaces wie z. B. http://adventure-works.com:80/sqlapp1 und http://adventure-works.com:80/sqlapp2/dir1.

HinweisHinweis

Wenn Sie einen HTTP-Namespace mithilfe des Kernelmodus-HTTP-Treibers (Http.sys) reservieren möchten, sind Windows-Administratorprivilegien für den lokalen Computer erforderlich, auf dem die Instanz von SQL Server installiert ist.

Erstellen einer expliziten Reservierung

Um eine explizite Reservierung vorzunehmen, kann ein Administrator, der Benutzer in die Lage versetzen möchte, eine Endpunkt-DDL-Anweisung (Data Definition Language) ohne das Erfordernis hoher Privilegien auf dem Computer ausführen zu können, einen URL-Namespace mithilfe der gespeicherten Prozedur sp_reserve_http_namespace reservieren.

Sie können z. B. eine Verbindung mit einer Instanz von SQL Server mithilfe von Windows-Authentifizierung und einer Anmeldung mit Administratorprivilegien herstellen und dann die folgende gespeicherte Prozedur ausführen:

sp_reserve_http_namespace N'http://MyServer:80/sql'
GO

Die gespeicherte Prozedur reserviert den angegebenen Namespace explizit; dabei ist MyServer der Servername und 80 die Portnummer. Durch diesen Vorgang wird der angegebene URL-Namespace so reserviert, dass nachfolgende DDL-Operationen in diesem Namespace keine Administratorprivilegien für den Computer erfordern. Ein Benutzer ohne jegliche Administratorprivilegien für den Computer kann die Endpunkt-DDL-Anweisung ausführen.

Ein Benutzer kann z. B. folgende CREATE ENDPOINT-Anweisung ausführen:

CREATE ENDPOINT sql_endpoint 
STATE = STARTED
AS HTTP(
   PATH = '/sql/AdvWorks', 
   AUTHENTICATION = (INTEGRATED ), 
   PORTS = ( CLEAR ), 
   SITE = 'MyServer'
)
FOR SOAP (
    ...
)
GO

Die Endpunktanweisung registriert lediglich /sql/AdvWorks im reservierten Namespace in HTTP.SYS. Eine Clientanwendung kann anschließend eine SOAP-Anforderung senden und z. B. eine WSDL-Antwort vom Server an den Endpunkt anfordern:

http://MyServer/sql/AdvWorks?wsdl

Der Namespacename, der in der gespeicherten Prozedur sp_reserve_http_namespace angegeben wird, muss die folgende Form besitzen:

<scheme>://<hostpart>[:<port>]/<RelativeURI>
  • scheme
    Mögliche Werte sind http oder https.

  • hostpart
    Es kann sich um einen bestimmten Hostnamen oder die folgenden Platzhalterzeichen handeln: das Pluszeichen (+) oder ein Sternchen (*).

    Das Pluszeichen (+) gibt an, dass der Reservierungsvorgang für alle möglichen Hostnamen für den Computer für das angegebene <Schema> und den <Port> gilt.

    Das Sternchen (*) gibt an, dass der Reservierungsvorgang für alle möglichen Hostnamen für den Computer für das <Schema> und den <Port> gilt, die nicht anderweitig explizit reserviert sind, z. B. durch Ausführen anderer sp_reserve_http_namespace-Operationen, aktive Endpunkte oder andere Anwendungen.

Identifizieren des Namespaces für einen Endpunkt

Den richtigen Namespace für einen Endpunkt können Sie anhand der Parameter der CREATE ENDPOINT-Anweisung ermitteln.

Der Wert des PORTS-Parameters für die CREATE ENDPOINT-Anweisung bestimmt das Schema für den Namespace. Die folgende Tabelle stellt dies dar:

Endpunktwert

<scheme>-Wert

CLEAR

http

SSL

https

n

http

Der Wert des CLEAR_PORT- oder des SSL_PORT-Parameters legt den <port>-Wert des Namespaces fest

Der Wert des PATH-Parameters legt die <RelativeURI> des Namespaces fest.

Der Wert des SITE-Parameters legt den <hostpart> des Namespaces fest.

Die folgende Anweisung erstellt z. B. einen Endpunkt mit dem Namespace http://testhost:80/sqlurl/myapp.

CREATE ENDPOINT ext_endpoint
    STATE = STARTED
AS HTTP (       
PATH = '/sqlurl/myapp'
, PORTS = CLEAR
, SITE = testhost
, CLEAR_PORT = 80 
)

Die folgende Anweisung erstellt einen Endpunkt mit dem Namespace https://*:443/sqlurl/myapp:

CREATE ENDPOINT ext_endpoint
    STATE = STARTED
AS HTTP (       
PATH = '/sqlurl/myapp'
, PORTS = SSL
, SITE = '*'
, SSL_PORT = 443 
)

Beispiele

Das folgende Beispiel zeigt nochmals, wie ein Administrator einen Namespace in HTTP.SYS für eine SSL-Verbindung reserviert. Daher kann ein Benutzer Endpunkte erstellen, wenn PORT auf SSL festgelegt wird.

sp_reserve_http_namespace N'https://MyServer:443/sql'