Angeben von Protokollsequenzen
Serveranwendungen müssen eine oder mehrere Protokollsequenzen auswählen, die bei der Kommunikation mit dem Client über das Netzwerk verwendet werden sollen. Die Wahl der Protokollsequenzen ist netzwerkabhängig. Weitere Informationen finden Sie unter Interpretieren von Bindungsinformationen und Auswählen einer Protokollsequenz.
Ihr Serverprogramm kann Clients ermöglichen, eine Verbindung mit einer beliebigen Protokollsequenz herzustellen, die vom Netzwerk unterstützt wird. Rufen Sie dazu RpcServerUseAllProtseqs auf, und übergeben Sie RPC_C_PROTSEQ_MAX_REQS_DEFAULT als ersten Parameter. Dies ist jedoch nicht der empfohlene Ansatz. Vielmehr reicht die Verwendung von ncalrpc für lokale Anrufe und ncacn_ip_tcp oder ncacn_http für Remoteanrufe in der Regel aus. Heterogene Netzwerke sind ungewöhnlich, und praktisch alle Netzwerke unterstützen TCP/IP.
Wenn Ihr Client die Portzuordnung für dynamische Endpunkte auf einen bestimmten Portbereich beschränken soll, rufen Sie stattdessen RpcServerUseAllProtseqsEx auf. Diese Funktion ist spezifisch für Microsoft RPC und äußerst nützlich für Remoteprozeduraufrufe, die über eine Firewall geleitet werden. Es verwendet einen zusätzlichen Parameter, um Portzuordnungssteuerungsflags an die Funktion zu übergeben. Weitere Informationen finden Sie unter Konfigurieren der Registrierung für Portzuordnungen und selektive Bindung.
Sie können Protokollsequenzen und Endpunktinformationen in Ihrer MIDL-Datei angeben, wenn Sie die Schnittstellen des Servers entwickeln. Wenn Sie dies tun, sollte Ihr Server RpcServerUseAllProtseqsIf verwenden, um alle Protokollsequenzen und zugehörigen Endpunktinformationen zu registrieren, die in der IDL-Datei bereitgestellt werden. Darüber hinaus gibt es eine entsprechende RpcServerUseAllProtseqsIfEx-Funktion , die es dem Server auch ermöglicht, Portzuordnungssteuerungsflags zu übergeben.
Wenn Sie Ihre Client- und Serverprogramme für die Kommunikation mit einer angegebenen Protokollsequenz konfigurieren möchten, sollte die Serveranwendung RpcServerUseProtseq aufrufen. Eine vollständige Liste der Microsoft RPC-Protokollsequenzen finden Sie unter Protokollsequenzkonstanten.
Microsoft RPC bietet auch RpcServerUseProtseqEx , damit Anwendungen bestimmte Protokollsequenzen auswählen und die dynamische Portzuordnung steuern können.
Zusätzlich zu verbindungsorientierten Protokollen unterstützt Microsoft RPC auch Datagrammprotokolle (verbindungslos). Verbindungsorientierte Protokolle werden empfohlen. Datagrammprotokolle verfügen über andere Featuresätze als verbindungsorientierte Protokolle und sollten nur verwendet werden, wenn ein Entwickler eines verteilten Systems ein Feature benötigt, das nur in Datagrammprotokollen verfügbar ist. Einige der verfügbaren Features bei der Verwendung von Datagrammprotokollen sind:
- Datagramme unterstützen die verbindungslosen Transportprotokolle UDP und IPX.
- Da es nicht erforderlich ist, eine Verbindung herzustellen und aufrechtzuerhalten, erfordert das Datagram RPC-Protokoll weniger Ressourcenaufwand.
- Datagramme ermöglichen eine schnellere Bindung.
- Wie bei verbindungsorientiertem RPC sind Datagram-RPC-Aufrufe standardmäßig nichtidempotent. Das bedeutet, dass der Aufruf garantiert nicht mehr als einmal ausgeführt wird. Eine Funktion kann jedoch in der IDL-Datei als idempotent markiert werden, um RPC mitzuteilen, dass es harmlos ist, die Funktion mehrmals als Reaktion auf eine einzelne Clientanforderung auszuführen. Dadurch kann die Laufzeit weniger Zustand auf dem Server beibehalten. Beachten Sie, dass ein idempotent-Aufruf nur in seltenen Fällen in einem instabilen Netzwerk erneut ausgeführt wird.
- Datagram RPC unterstützt das Broadcast-IDL-Attribut. Broadcast ermöglicht es einem Client, Nachrichten gleichzeitig an mehrere Server auszugeben. Dadurch kann der Client einen von mehreren verfügbaren Servern im Netzwerk finden oder mehrere Server gleichzeitig steuern. Beachten Sie, dass die Datagrammübertragung nur innerhalb der lokalen Verbindung gültig ist und in der Regel keine Router kreuzt. Broadcast-Aufrufe sind implizit idempotent. Wenn der Aufruf [out]-Parameter enthält, wird nur die erste Serverantwort zurückgegeben. Sobald ein Server antwortet, werden alle zukünftigen RPCs über dieses Bindungshandle nur an diesen Server gesendet, einschließlich Aufrufen mit dem broadcast-Attribut. Um eine weitere Übertragung zu senden, erstellen Sie ein neues Bindungshandle, oder rufen Sie RpcBindingReset für das vorhandene Handle auf.
- Datagram RPC unterstützt das möglicherweise IDL-Attribut. Dadurch kann der Client einen Aufruf an den Server senden, ohne auf eine Antwort oder Bestätigung zu warten. Der Aufruf darf keine [out]-Parameter enthalten. Aufrufe, die die [vielleicht] -Aufrufe verwenden, sind implizit idempotent.