Negociação de Media-Type
Muitos protocolos de Internet de camada de aplicativo são baseados na troca de mensagens em um formato simples e flexível chamado MIME (Extensão de Email da Internet Multiuso). Embora o MIME tenha se originado como um padrão para a troca de mensagens de email eletrônico, ele é usado hoje por uma ampla variedade de aplicativos para especificar formatos de dados mutuamente compreendidos como mime ou mídia. O processo é chamado de negociação de tipo de mídia.
Os tipos de mídia são cadeias de caracteres simples que denotam um tipo e um subtipo (como "texto/sem formatação" ou "texto/HTML"). Eles são usados para rotular dados ou qualificar uma solicitação. Um navegador da Web, por exemplo, como parte de uma solicitação HTTP para dados ou solicitação de informações, especifica que ele está solicitando tipos de mídia "image/gif" ou "image/jpeg", aos quais um servidor Web responde retornando o tipo de mídia apropriado e, se a chamada for uma solicitação de dados, os próprios dados no formato solicitado.
A negociação de tipo de mídia geralmente é semelhante à maneira como os aplicativos de área de trabalho existentes negociam com a área de transferência do sistema para determinar qual formato de dados colar quando um usuário escolhe Editar/Colar ou consultas para formatos ao receber um ponteiro deIDataObjectdurante uma operação de arrastar e soltar. A diferença sutil na negociação de tipo de mídia HTTP é que o cliente não sabe antecipadamente quais formatos o servidor tem disponível. Portanto, o cliente especifica antecipadamente os tipos de mídia compatíveis, em ordem de maior fidelidade, e o servidor responde com o melhor formato disponível.
Os monikers de URL dão suporte à negociação de tipo de mídia como uma forma de clientes e servidores da Internet concordarem com formatos a serem usados ao baixar dados em operações deBindToStorage. Para dar suporte à negociação de tipo de mídia, um cliente implementa a interface deIEnumFORMATETC e chama a função RegisterFormatEnumerator para registrá-la com o contexto de associação. O enumerador de formato lista os formatos que o cliente pode aceitar. Um moniker de URL converte esses formatos em tipos de mídia ao associar a URLs HTTP.
Os tipos de mídia possíveis solicitados pelo cliente são representados para monikers de URL por meio de estruturas de FORMATETC disponíveis no Enumerador IEnumFORMATETC registrado pelo chamador no contexto de associação: Cada FORMATETC especifica um formato de área de transferência que identifica o tipo de mídia. Por exemplo, o fragmento de código a seguir especifica que o tipo de mídia é PostScript.
FORMATETC fmtetc;
fmtetc.cfFormat = RegisterClipboardFormat(CF_MIME_POSTSCRIPT);
. . .
Um cliente pode definir o formato da área de transferência como o tipo de mídia especial CF_NULL para indicar que o tipo de mídia padrão do recurso apontado pela URL deve ser recuperado. Esse formato geralmente é o último no qual o cliente está interessado. Quando nenhum enumerador é registrado com o contexto de associação, um moniker de URL funciona como se um enumerador contendo um único FORMATETC com cfFormat=CF_NULL estivesse disponível, baixando automaticamente o tipo de mídia padrão.
Seja qual for o tipo de mídia a ser usado, o cliente é notificado da escolha por meio do argumento pformatetc em seu método IBindStatusCallback::OnDataAvailable. O retorno de chamada ocorre no contexto da chamada do cliente para bindToStorage.
Nota
Se o conteúdo recebido for de um tipo de mídia não reconhecido, o cliente chamará automaticamente RegisterMediaTypes para registrar o novo tipo.
Tópicos relacionados