Data-Pull-Modell und Data-Push-Modell

Ein Client eines asynchronen Monikers kann zwischen einem Daten pull- und data-push-Modell wählen, um einen asynchronen IMoniker::BindToStorage-Vorgang zu betreiben und asynchrone Benachrichtigungen zu empfangen. Im Daten-Pull-Modell steuert der Client den Bindungsvorgang, und der Moniker stellt daten nur beim Lesen für den Client bereit. Anders ausgedrückt: Nach dem ersten Aufruf von IBindStatusCallback::OnDataAvailablestellt der Moniker keine Daten für den Client bereit, es sei denn, der Client hat alle bereits verfügbaren Daten genutzt.

Da Daten nur so heruntergeladen werden, wie sie angefordert werden, müssen Clients, die das Daten-Pull-Modell auswählen, sicherstellen, dass diese Daten rechtzeitig gelesen werden. Bei Internetdownloads mit URL-Monikernschlägt der Bindungsvorgang möglicherweise fehl, wenn ein Client zu lange wartet, bevor er weitere Daten anfordert.

Im Daten-Push-Modell steuert der Moniker den asynchronen Bindungsvorgang und benachrichtigt den Client kontinuierlich, wenn neue Daten verfügbar sind. Der Client kann auswählen, ob die Daten zu einem beliebigen Zeitpunkt während des Bindungsvorgangs gelesen werden sollen, aber der Moniker führt den Bindungsvorgang unabhängig davon zum Abschluss.

Denken Sie außerdem daran, die COM-Regeln für die Speicherbelegung zu befolgen, wenn Sie asynchrone Moniker verwenden, insbesondere die folgenden:

  • Wenn eine COM-Schnittstelle oder ein Funktionsaufruf einen Puffer (Zeichenfolge oder andere) an seinen Client zurückgibt, ist der Client für die Freigabe des Arbeitsspeichers durch Aufrufen von CoTaskMemFreeverantwortlich.
  • Wenn eine COM-Schnittstelle oder -Funktion einen Puffer vom Client erfordert, muss der Client diesen Puffer mit coTaskMemAlloc zuordnen, und der Aufgerufene muss ihn freigeben.

Achten Sie darauf, diese Regeln zu befolgen, wenn Sie Zeichenfolgen oder Puffer zuweisen, die an asynchrone Moniker übergeben werden, und denken Sie daran, den von asynchronen Monikern zurückgegebenen Arbeitsspeicher freizugeben. Ausführliche Informationen finden Sie unter Verwalten der Speicherbelegung und verwandte Themen.

Asynchrone Moniker