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 sencillo y flexible denominado Multipurpose Internet Mail Extensions (MIME). Aunque MIME se originó como estándar para intercambiar mensajes de correo electrónico, hoy en día 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 "texto/sin formato" o "texto/HTML"). Se usan para etiquetar datos o calificar una solicitud. Un explorador web, por ejemplo, como parte de una solicitud HTTP-for-data 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 de datos, los datos en sí mismos en el formato solicitado.

La negociación de tipo multimedia suele ser similar a la negociación de las aplicaciones de escritorio existentes con el Portapapeles del sistema para determinar qué formato de datos pegar cuando un usuario elige Editar/Pegar o consultas para formatos al recibir un puntero IDataObject durante 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 BindToStorage . Para admitir la negociación de tipo multimedia, un cliente implementa la interfaz IEnumFORMATETC 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 convierte estos formatos en tipos multimedia cuando se enlaza a direcciones URL HTTP.

Los posibles tipos de medios solicitados por el cliente se representan a monikers de direcciones URL a través de estructuras FORMATETC disponibles desde el enumerador IEnumFORMATETC registrado por el autor de la llamada 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 contenga un solo 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 método IBindStatusCallback::OnDataAvailable . La devolución de llamada se produce en el contexto de la llamada del cliente a BindToStorage.

Nota

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

 

URL Monikers