Condividi tramite


Negoziazione di tipo multimediale

Molti protocolli Internet a livello di applicazione si basano sullo scambio di messaggi in un formato semplice e flessibile denominato MIME (Multipurpose Internet Mail Extensions). Anche se MIME ha avuto origine come standard per lo scambio di messaggi di posta elettronica, viene usato oggi da un'ampia gamma di applicazioni per specificare formati di dati reciprocamente compresi come tipi MIME, o supporti. Il processo è denominato negoziazione di tipo multimediale.

I tipi multimediali sono stringhe semplici che indicano un tipo e un sottotipo (ad esempio "text/plain" o "text/HTML"). Vengono usati per etichettare i dati o qualificare una richiesta. Un Web browser, ad esempio, come parte di una richiesta HTTP per dati o request-for-info, specifica che richiede i tipi di supporto "image/gif" o "image/jpeg", a cui un server Web risponde restituendo il tipo di supporto appropriato e, se la chiamata è una richiesta per i dati, i dati stessi nel formato richiesto.

La negoziazione del tipo di supporto è spesso simile a quella in cui le applicazioni desktop esistenti negoziano con gli Appunti di sistema per determinare il formato di dati da incollare quando un utente sceglie Modifica/Incolla o esegue query per i formati durante la ricezione di un puntatore IDataObject durante un'operazione di trascinamento della selezione. La differenza sottile nella negoziazione del tipo di supporto HTTP è che il client non conosce in anticipo i formati disponibili per il server. Pertanto, il client specifica i tipi di supporti supportati, in ordine di massima fedeltà, e il server risponde con il formato migliore disponibile.

I moniker URL supportano la negoziazione di tipo multimediale come modo per consentire ai client e ai server Internet di accettare i formati da usare durante il download dei dati nelle operazioni BindTo Archiviazione. Per supportare la negoziazione di tipo multimediale, un client implementa l'interfaccia IEnumFORMATETC e chiama la funzione RegisterFormatEnumerator per registrarla nel contesto di binding. L'enumeratore di formato elenca i formati che il client può accettare. Un moniker URL converte questi formati in tipi di supporti quando si esegue l'associazione agli URL HTTP.

I possibili tipi di supporti richiesti dal client vengono rappresentati ai moniker URL tramite strutture FORMATETC disponibili dall'enumeratore IEnumFORMATETC registrato dal chiamante nel contesto di associazione: ogni FORMATETC specifica un formato degli Appunti che identifica il tipo di supporto. Ad esempio, il frammento di codice seguente specifica che il tipo di supporto è PostScript.

FORMATETC fmtetc;
fmtetc.cfFormat = RegisterClipboardFormat(CF_MIME_POSTSCRIPT);
. . .

Un client può impostare il formato degli Appunti sul tipo di supporto speciale CF_NULL per indicare che deve essere recuperato il tipo di supporto predefinito della risorsa a cui punta l'URL. Questo formato è in genere l'ultimo in cui il client è interessato. Quando non viene registrato alcun enumeratore con il contesto di associazione, un moniker URL funziona come se fosse disponibile un enumeratore contenente un singolo FORMATETC con cfFormat=CF_NULL, scaricando automaticamente il tipo di supporto predefinito.

Indipendentemente dal tipo di supporto da usare, il client riceve una notifica della scelta tramite l'argomento pformatetc nel metodo IBindStatusCallback::OnDataAvailable. Il callback si verifica nel contesto della chiamata del client a BindTo Archiviazione.

Nota

Se il contenuto ricevuto è di tipo multimediale non riconosciuto, il client chiama automaticamente RegisterMediaTypes per registrare il nuovo tipo.

 

Moniker URL