Freigeben über


Data-Pull Modell und Data-Push-Modell

Ein Client eines asynchronen Monikers kann zwischen einem Daten-Pull- und Data-Push-Modell wählen, um eine asynchrone 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 für den Client bereit. Anders ausgedrückt: Nach dem ersten Aufruf von IBindStatusCallback::OnDataAvailablestellt der Moniker dem Client keine Daten bereit, es sei denn, der Client hat alle daten verbraucht, die bereits verfügbar sind.

Da Daten nur bei Bedarf heruntergeladen werden, müssen Clients, die das Daten-Pull-Modell auswählen, diese Daten zeitnah lesen. Bei Internetdownloads mit URL-Monikernkann der Bindungsvorgang fehlschlagen, wenn ein Client zu lange wartet, bevor weitere Daten angefordert werden.

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.

Außerdem müssen Sie sich daran erinnern, die COM-Regeln für die Speicherzuweisung bei Verwendung asynchroner Moniker zu befolgen, insbesondere die folgenden:

  • Wenn ein COM-Schnittstellen- oder Funktionsaufruf einen Puffer (Zeichenfolge oder ein anderes) an seinen Client zurückgibt, ist der Client dafür verantwortlich, den Speicher freizugeben, indem er CoTaskMemFreeaufruft.
  • Wenn eine COM-Schnittstelle oder -Funktion einen Puffer vom Client benötigt, muss der Client diesen Puffer mithilfe CoTaskMemAlloc zuweisen, und der Angerufene muss ihn freigeben.

Beachten Sie diese Regeln beim Zuweisen von Zeichenfolgen oder Puffern, die an asynchrone Moniker übergeben werden, und denken Sie daran, von asynchronen Monikern zurückgegebenen Arbeitsspeicher freizugeben. Ausführliche Informationen finden Sie unter Managing Memory Allocation und verwandten Themen.

asynchrone Moniker