Compartir a través de


negociación de Media-Type

Muchos protocolos de Internet de capa de aplicación se basan en el intercambio de mensajes en un formato simple y flexible denominado Extensiones de correo de Internet multipropósito (MIME). Aunque MIME se originó como estándar para intercambiar mensajes de correo electrónico, hoy se usa en una amplia variedad de aplicaciones para especificar formatos de datos comprendidos mutuamente como MIME, o tipos multimedia. El proceso se denomina negociación de tipo multimedia.

Los tipos de medios son cadenas simples que denotan un tipo y un subtipo (como "text/plain" o "text/HTML"). Se usan para etiquetar datos o calificar una solicitud. Un explorador web, por ejemplo, como parte de una solicitud HTTP para datos o request-for-info, especifica que solicita tipos de medios "image/gif" o "image/jpeg", a los que un servidor web responde devolviendo el tipo de medio adecuado y, si la llamada era una solicitud para datos, los datos en sí en el formato solicitado.

La negociación de tipo multimedia suele ser similar a la forma en que las aplicaciones de escritorio existentes negocian con el Portapapeles del sistema para determinar qué formato de datos se pega cuando un usuario elige Editar/Pegar o consultas para formatos al recibir un puntero IDataObjectdurante una operación de arrastrar y colocar. La sutil diferencia en la negociación de tipo multimedia HTTP es que el cliente no sabe con antelación qué formatos tiene disponible el servidor. Por lo tanto, el cliente especifica por adelantado los tipos de medios que admite, en orden de mayor fidelidad, y el servidor responde con el mejor formato disponible.

Los monikers url admiten la negociación de tipo multimedia como una manera de que los clientes y servidores de Internet acepten los formatos que se usarán al descargar datos en operaciones de BindToStorage. Para admitir la negociación de tipo multimedia, un cliente implementa la interfazIEnumFORMATETC y llama a la función RegisterFormatEnumerator para registrarla con el contexto de enlace. El enumerador de formato enumera los formatos que el cliente puede aceptar. Un moniker de dirección URL traduce estos formatos en tipos multimedia cuando se enlazan a direcciones URL HTTP.

Los posibles tipos de medios solicitados por el cliente se representan a monikers de dirección URL a través de estructuras de FORMATETC disponibles en el enumerador de IEnumFORMATETC registrado por el llamador en el contexto de enlace: Cada FORMATETC especifica un formato de portapapeles que identifica el tipo de medio. Por ejemplo, el fragmento de código siguiente especifica que el tipo de medio es PostScript.

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

Un cliente puede establecer el formato del Portapapeles en el tipo de medio especial CF_NULL para indicar que se debe recuperar el tipo de medio predeterminado del recurso al que apunta la dirección URL. Este formato suele ser el último en el que el cliente está interesado. Cuando no se registra ningún enumerador con el contexto de enlace, un moniker de dirección URL funciona como si un enumerador que contiene un único FORMATETC con cfFormat=CF_NULL está disponible, descargando automáticamente el tipo de medio predeterminado.

Sea cual sea el tipo de medio que se va a usar, se notifica al cliente la elección por medio del argumento pformatetc en su IBindStatusCallback::OnDataAvailable método. La devolución de llamada se produce dentro del contexto de la llamada del cliente a BindToStorage.

Nota

Si el contenido recibido es de un tipo multimedia no reconocido, el cliente llama automáticamente a RegisterMediaTypes para registrar el nuevo tipo.

 

URL monikers