Freigeben über


Data-Pull-Modell und Data-Push-Modell

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

Da Daten nur während der Anforderung heruntergeladen werden, müssen Clients, die das Daten pull-Modell auswählen, sicherstellen, dass diese Daten rechtzeitig gelesen werden. Bei Internetdownloads mit URL-Monikern schlägt der Bindungsvorgang möglicherweise fehl, wenn ein Client zu lange wartet, bevor er weitere Daten anfordert.

Im Datenpushmodell steuert der Moniker den asynchronen Bindungsvorgang und benachrichtigt den Client kontinuierlich, wenn neue Daten verfügbar sind. Der Client kann wä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 zur Vervollständigung.

Außerdem müssen Sie die COM-Regeln für die Speicherzuordnung beachten, wenn Sie asynchrone Moniker verwenden, insbesondere die folgenden:

  • Wenn eine COM-Schnittstelle oder ein Funktionsaufruf einen Puffer (Zeichenfolge oder andere) an den Client zurückgibt, ist der Client für die Freigabe des Arbeitsspeichers durch Aufrufen von CoTaskMemFree verantwortlich.
  • Wenn eine COM-Schnittstelle oder -Funktion einen Puffer von ihrem Client erfordert, muss der Client diesen Puffer mithilfe von CoTaskMemAlloc zuordnen, und der Aufgerufene muss ihn freigeben.

Achten Sie beim Zuweisen von Zeichenfolgen oder Puffern, die an asynchrone Moniker übergeben werden, unbedingt an diese Regeln, und denken Sie daran, von asynchronen Monikern zurückgegebenen Arbeitsspeicher freizugeben. Ausführliche Informationen finden Sie unter Verwalten der Speicherzuordnung und verwandter Themen.

Asynchrone Moniker