Contextgrepen
Het is soms het geval dat gedistribueerde toepassingen het serverprogramma nodig hebben om statusinformatie tussen clientoproepen te onderhouden. Serverprogramma's die meerdere clients tegelijk gebruiken, moeten de statusgegevens voor elke client behouden. Omdat de client en de server verschillende adresruimten op verschillende computers gebruiken en ze elkaar niet noodzakelijkerwijs vertrouwen, werken algemene benaderingen voor het delen van gegevens vaak niet. De client en server kunnen bijvoorbeeld geen statusinformatie bijhouden voor hun externe sessie in globale variabelen omdat ze niet dezelfde globale adresruimte delen. Het is moeilijk om de gegevens in een gedeeld bestand te bewaren, omdat ze op verschillende computers worden uitgevoerd. Een simplistische benadering kan zijn om alle statussen naar de client te verzenden en de client deze te laten retourneren bij de volgende aanroep, maar deze benadering heeft fouten: de server vertrouwt niet noodzakelijkerwijs dat de client de juiste status retourneert en de status impliciet is gekoppeld aan een andere status op de server, zoals bestandsgrepen of geopende sockets.
Microsoft RPC biedt een krachtig en veilig mechanisme dat contextingangen wordt genoemd voor het behouden van de status die is gekoppeld aan een bepaalde client op een server. De statusinformatie wordt de context van de server genoemd. Clients kunnen een contextgreep verkrijgen om de context van de server voor hun afzonderlijke RPC-sessies te identificeren.
Elke client in een gedistribueerde toepassing kan bijvoorbeeld het serverprogramma een gegevensbestand voor hun RPC-sessie laten maken en bijwerken. De server kan de bestandsingang voor het gegevensbestand van elke client gebruiken als contextgreep. Telkens wanneer een client bewerkingen aanvraagt in het gegevensbestand dat door de server wordt gemaakt, geeft de client de contextgreep door aan de server. De client krijgt de bestandsingang niet zelf; er wordt een ondoorzichtig token opgehaald dat de RPC-uitvoeringstijd van de server uniek kan worden gekoppeld aan de bestandsingang. Omdat de contextgreep echt een bestandsgreep is, is de contextgreep alleen zinvol in de adresruimte van de server. Het clientprogramma kan echter de contextgreep gebruiken om de server op te geven op welk bestand updates moeten worden uitgevoerd.
Andere gegevens kunnen ook contextingangen zijn. Een client en server kunnen bijvoorbeeld een recordnummer van een databaserecord gebruiken als bestandsingang. Als de client een aantal updates voor een bepaalde record moet uitvoeren, kan het recordnummer worden opgehaald als contextgreep. Het recordnummer wordt telkens doorgegeven aan de server wanneer deze een externe procedure aanroept om de databaserecord bij te werken.
Meestal verwijst een contextgreep naar een geheugenblok op de server waar de server verschillende beheergegevens bewaart.
In deze sectie vindt u informatie over het definiƫren en gebruiken van contextingangen. De discussie wordt gepresenteerd in de volgende onderwerpen:
- interfaceontwikkeling met contextgrepen
- serverontwikkeling met contextgrepen
- clientontwikkeling met contextgrepen
- Server Context Run-down Routine-
- clientcontext opnieuw instellen
- multithreaded clients en context verwerkt