Namespaceanbieterarchitektur in der SPI
Programmgesteuerte Schnittstellen, die zum Abfragen der verschiedenen Namespacetypen und zum Registrieren von Informationen innerhalb eines Namespace verwendet werden, unterscheiden sich, sofern unterstützt, stark. Ein Namespaceanbieter ist eine lokal residente Anwendung, die zwischen dem Windows Sockets-Namespace SPI und einem vorhandenen Namespace zugeordnet werden kann, der lokal implementiert oder über das Netzwerk aufgerufen werden kann. Dies wird wie folgt veranschaulicht:

Hinweis
Es ist möglich, dass für einen bestimmten Namespace, z. B. DNS, mehr als ein Namespaceanbieter auf einem bestimmten Computer installiert ist.
Wie bereits erwähnt, bezieht sich der generische Begriff Dienst auf die Serverhälfte einer Client-/Serveranwendung. In Windows Sockets ist ein Dienst einer Dienstklasse zugeordnet, und jede Instanz eines bestimmten Diensts verfügt über einen Dienstnamen, der innerhalb der Dienstklasse eindeutig sein muss. Beispiele für Dienstklassen sind FTP Server, SQL Server, XYZ Corp. Employee Info Server usw.
Wie das Beispiel zu veranschaulichen versucht, sind einige Dienstklassen bekannt, während andere eindeutig und spezifisch für eine bestimmte vertikale Anwendung sind. In beiden Fällen wird jede Dienstklasse sowohl durch einen Klassennamen als auch durch einen Klassenbezeichner dargestellt. Der Klassenname muss nicht unbedingt eindeutig sein, aber der Klassenbezeichner muss sein. GUIDs (Globally Unique Identifiers) werden verwendet, um Dienstklassen-IDs darzustellen. Für bekannte Dienste wurden Klassennamen und Klassenbezeichner (GUIDs) vorab zugeordnet, und Makros können zwischen TCP-Portnummern und den entsprechenden Klassenbezeichner-GUIDs konvertiert werden. Für andere Dienste wählt der Entwickler den Klassennamen aus und verwendet das hilfsprogramm Uuidgen.exe, um eine GUID für den Klassenbezeichner zu generieren.
Das Konzept einer Dienstklasse ist vorhanden, um die Einrichtung eines Satzes von Attributen zu ermöglichen, die von allen Instanzen eines bestimmten Diensts gemeinsam verwendet werden. Dieser Satz von Attributen wird Windows Sockets zum Zeitpunkt der Definition der Dienstklasse bereitgestellt und als Schemainformationen der Dienstklasse bezeichnet. Der _ Ws2-32.dll leitet diese Informationen wiederum an alle aktiven Namespaceanbieter weiter. Wenn eine Instanz eines Diensts auf einem Hostcomputer installiert und verfügbar gemacht wird, wird der Dienstname verwendet, um diese bestimmte Instanz von anderen Instanzen zu unterscheiden, die dem Namespace bekannt sein können.
Beachten Sie, dass die Installation einer Dienstklasse nur auf Computern erfolgen muss, auf denen der Dienst ausgeführt wird, nicht auf allen Clients, die den Dienst verwenden können. Nach Möglichkeit stellt die _ Ws2-32.dll Dienstklassenschemainformationen für einen Namespaceanbieter bereit, wenn eine Instanz eines Diensts registriert oder eine Dienstabfrage initiiert wird. Der _ Ws2-32.dll speichert diese Informationen natürlich nicht selbst, sondern versucht, sie von einem Namespaceanbieter abzurufen, der seine Fähigkeit zur Bereitstellung dieser Daten angegeben hat. Da es keine Garantie gibt, dass die _ Ws2-32.dll das Dienstklassenschema bereitstellen kann, müssen Namespaceanbieter, die diese Informationen benötigen, über einen Fallbackmechanismus verfügen, um sie über namespacespezifische Mittel abzurufen.
Das Internet Domain Name System verfügt nicht über eine klar definierte Möglichkeit zum Speichern von Dienstklassenschemainformationen. Daher können DNS-Namespaceanbieter nur bekannte TCP/IP-Dienste aufnehmen, für die eine Dienstklassen-GUID vorab zugeordnet wurde. In der Praxis ist dies keine schwerwiegende Einschränkung, da Dienstklassen-GUIDs für den gesamten Satz von TCP- und UDP-Ports vorab zugeordnet wurden und Makros verfügbar sind, um die GUID abzurufen, die jedem TCP- oder UDP-Port zugeordnet ist. Daher werden alle vertrauten Dienste wie ftp, telnet, whois usw. gut unterstützt. Beim Abfragen dieser Dienste entspricht der Hostname des Zielcomputers standardmäßig dem Namen der Dienstinstanz.
Wenn Sie mit unserem Dienstklassenbeispiel fortfahren, können Instanznamen des FTP-Diensts "alder.intel.com" oder "rhino.microsoft.com" sein, während eine Instanz der XYZ Corp. Employee Info Server den Namen "XYZ Corp. Employee Info Server Version 3.5" hat. In den ersten beiden Fällen identifiziert die Kombination der Dienstklassen-GUID für ftp und des Computernamens (als Dienstinstanzname angegeben) den gewünschten Dienst eindeutig. Im dritten Fall kann der Hostname, auf dem sich der Dienst befindet, zur Dienstabfragezeit ermittelt werden, sodass der Dienstinstanzname keinen Hostnamen enthalten muss.