negoziazione Media-Type
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 viene chiamato negoziazione di tipo supporto.
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 alla modalità di negoziazione delle applicazioni desktop esistenti 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 quando si riceve 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 BindToStorage. Per supportare la negoziazione del tipo di supporto, un client implementa l'interfacciaIEnumFORMATETCe chiama la funzione RegisterFormatEnumerator per registrarla con il contesto di associazione. 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 supporto richiesti dal client vengono rappresentati ai moniker URL tramite strutture FORMATETC disponibili dall'enumeratoreIEnumFORMATETCregistrato 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 sul relativo metodo IBindStatusCallback::OnDataAvailable. Il callback si verifica nel contesto della chiamata del client a BindToStorage.
Nota
Se il contenuto ricevuto è di un tipo di supporto non riconosciuto, il client chiama automaticamente RegisterMediaTypes per registrare il nuovo tipo.
Argomenti correlati