PNRP und WSASetService
PNRP verwendet die WSASetService-Funktion , um Peernamen zu registrieren oder zu entfernen.
Registrieren eines Namens
Die Registrierung umfasst einen Peernamen und eine Reihe von Endpunkten, mit denen ein Dienst kontaktiert werden kann. Eine Registrierung ist spezifisch für eine PNRP-Cloud. Nachdem ein Peer registriert wurde, kommt es zu einer Verzögerung zwischen der Registrierung und der Weitergabe der Registrierungsinformationen an andere Knoten. Während dieser Zeit können andere Knoten einen neu registrierten Peer möglicherweise nicht auflösen.
Die Dienstregistrierung ist nicht persistent.
- Wenn ein Clientprozess, der einen Peernamen registriert, WSACleanup beendet oder aufruft, wird die Registrierung des Peernamens aufgehoben.
- Wenn ein angegebener Peername bereits vom aktuellen Prozess in derselben Cloud registriert ist, wird er durch neue Registrierungswerte ersetzt.
Beim Registrieren eines Peernamens müssen die folgenden Parameterwerte angegeben werden:
- Der parameter essOperation muss den Wert RNRSERVICE_REGISTER haben.
- der dwControlFlags-Parameter muss null (0) sein.
Beim Registrieren eines Peernamens muss die LPWSAQUERYSET-Struktur , auf die vom lpqsRegInfo-Parameter verwiesen wird, die folgenden Werte enthalten:
-
dwSize
-
Gibt die Größe dieser Struktur an.
-
lpszServiceInstanceName
-
Gibt einen zu registrierenden Peernamen an. Wenn der Peername nicht gesichert ist, ist die Identität optional. Wenn die Identität als NULL angegeben ist, verwendet PNRP standardmäßig die lokale Identität des Computers.
-
lpServiceClassID
-
Muss SVCID_PNRPNAME sein.
-
lpVersion
-
Ignoriert. Auf NULL festgelegt.
-
lpszComment
-
Ignoriert. Die Zeichenfolge muss jedoch immer noch weniger als 40 Zeichen umfassen, einschließlich des NULL-Abschlusszeichens .
-
dwNameSpace
-
Muss entweder NS_PNRPNAME oder NS_ALL sein.
-
lpNSProviderID
-
Muss entweder NS_PROVIDER_PNRPNAME oder NULL sein.
-
lpszContext
-
Muss ein Cloudname, eine leere Zeichenfolge oder NULL sein. Wenn dieser Wert NULL oder eine leere Zeichenfolge ist, wird die Standardwolke "Global" verwendet. Andernfalls muss er auf einen gültigen Cloudnamen verweisen.
-
dwNumberOfProtocols
-
Ignoriert. Auf Null (0) festgelegt.
-
lpszQueryString
-
Ignoriert. Auf NULL festgelegt.
-
dwNumberOfCsAddrs
-
Gibt die Anzahl der von einem Dienst registrierten Adressen an. Die maximale Anzahl von Adressen, die für einen einzelnen Namen registriert werden können, beträgt 10.
-
lpcsaBuffer
-
Zeiger auf eine Liste der zu registrierenden Adressen.
-
dwOutputFlags
-
Ignoriert. Auf Null (0) festgelegt.
-
lpBlob
-
Zeiger auf eine BLOB-Struktur , die auf eine PNRPINFO-Struktur verweist. Bestimmte Parameter in der PNRPINFO-Struktur müssen festgelegt werden. Weitere Informationen finden Sie im folgenden Abschnitt zur PNRPINFO-Struktur .
PNRPINFO-Struktur
Wenn das lpBlob-Element der LPWSAQUERYSET-Struktur festgelegt ist, müssen die folgenden Member der PNRPINFO-Struktur festgelegt werden:
-
dwSize
-
Gibt die Größe dieser Struktur an.
-
lpwszIdentity
-
Gibt die Identität des Peernamens an, der mithilfe von PeerIdentityCreate erstellt wird. Wenn ein Peername nicht gesichert ist, ist die Identität optional. Wenn die Identität als NULL angegeben ist, verwendet PNRP standardmäßig die lokale Identität des Computers.
-
nMaxResolve
-
Ignoriert. Auf Null (0) festgelegt.
-
dwTimeout
-
Ignoriert. Auf Null (0) festgelegt.
-
dwLifetime
-
Gibt die Anzahl der Sekunden zwischen Aktualisierungsvorgängen an.
-
enResolveCriteria
-
Ignoriert. Auf Null (0) festgelegt.
-
dwFlags
-
Muss entweder null (0) oder PNRPINFO_HINT sein. Der Standardwert ist null (0). Dies bedeutet, dass der Dienststandortteil der PNRP-ID mithilfe der IP-Adresse in saHint erstellt wird. Andernfalls wird der Dienstspeicherort mithilfe der ersten IP-Adresse im ersten IPv6-Eintrag des lpcsaBuffer-Elements erstellt.
-
saHint
-
Gibt die IPv6-Adresse für den Hinweis an.
-
enNameState
-
Ignoriert. Auf Null (0) festgelegt.
Aufheben der Registrierung eines Peernamens
Die folgende Liste enthält die wichtigen Informationen zum Aufheben der Registrierung eines Peernamens.
- Nur eine Anwendung, die einen Peernamen registriert, kann die Registrierung aufheben.
- Ein Peername wird automatisch nicht registriert, wenn WSACleanup aufgerufen wird.
- PNRP entfernt immer die gesamte Dienstnamenregistrierung. Das Entfernen einzelner Adressen ist nicht zulässig.
- Wenn Sie die Registrierung eines Namens aufheben, muss der Parameter essOperation den Wert RNRSERVICE_DELETE haben.
- PNRP unterstützt den Wert RNRSERVICE_DEREGISTER nicht.
- Der dwControlFlags-Parameter muss null (0) sein.
Beim Aufheben der Registrierung eines Namens muss die LPWSAQUERYSET-Struktur , auf die der lpqsRegInfo-Parameter verweist, die folgenden Werte enthalten:
-
dwSize
-
Gibt die Größe dieser Struktur an.
-
lpszServiceInstanceName
-
Gibt einen Peernamen an, der die Registrierung aufheben soll.
-
lpServiceClassID
-
Muss SVCID_PNRPNAME sein.
-
lpVersion
-
Ignoriert. Legen Sie auf NULL fest.
-
lpszComment
-
Ignoriert. Legen Sie auf NULL fest.
-
dwNameSpace
-
Muss entweder NS_PNRPNAME oder NS_ALL sein.
-
lpNSProviderID
-
Muss entweder NS_PROVIDER_PNRPNAME oder NULL sein.
-
lpszContext
-
Muss ein Cloudname, eine leere Zeichenfolge oder NULL sein. Wenn dieser Wert NULL oder eine leere Zeichenfolge ist, wird die Standardwolke "Global" verwendet. Andernfalls muss auf einen gültigen Cloudnamen verweisen.
-
dwNumberOfProtocols
-
Ignoriert. Legen Sie auf Null (0) fest.
-
lpszQueryString
-
Ignoriert. Legen Sie auf NULL fest.
-
dwNumberOfCsAddrs
-
Ignoriert. Legen Sie auf NULL fest.
-
lpcsaBuffer
-
Ignoriert. Legen Sie auf NULL fest.
-
dwOutputFlags
-
Ignoriert. Legen Sie auf Null (0) fest.
-
lpBlob
-
Zeiger auf eine BLOB-Struktur , die auf eine PNRPINFO-Struktur verweist. Das lpszIdentity-Element der lpBlob-Struktur identifiziert den Namen der Identität, die zum Registrieren eines Peernamens verwendet wird. Für die übrigen Member müssen dieselben Werte festgelegt werden, die beim Registrieren eines Namens verwendet werden.
Zugehörige Themen
-
WSASetService
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für