Udostępnij przez


Media-Type negocjacji

Wiele protokołów internetowych warstwy aplikacji opiera się na wymianie wiadomości w prostym, elastycznym formacie o nazwie Multipurpose Internet Mail Extensions (MIME). Mimo że miME pochodzi jako standard wymiany wiadomości elektronicznych, jest on używany obecnie przez szeroką gamę aplikacji do określania wzajemnie zrozumiałych formatów danych jako MIME lub nośników, typów. Proces jest nazywany negocjacji typu nośnika.

Typy multimediów to proste ciągi, które oznaczają typ i podtyp (na przykład "tekst/zwykły" lub "tekst/HTML"). Są one używane do etykietowania danych lub kwalifikowania żądania. Przeglądarka sieci Web, na przykład jako część żądania HTTP dla danych lub request-for-info, określa, że żąda "image/gif" lub "image/jpeg", do których serwer internetowy odpowiada, zwracając odpowiedni typ nośnika i, jeśli wywołanie było żądaniem dla danych, dane same w żądanym formacie.

Negocjacje typu nośnika są często podobne do tego, jak istniejące aplikacje klasyczne negocjują ze schowkiem systemowym, aby określić format danych, który ma być wklejony, gdy użytkownik wybierze opcję Edytuj/Wklej lub zapytania dotyczące formatów podczas odbierania wskaźnika IDataObject podczas operacji przeciągania i upuszczania. Subtelna różnica w negocjacjach typu multimediów HTTP polega na tym, że klient nie wie wcześniej, który formaty serwera są dostępne. W związku z tym klient określa z góry obsługiwane typy multimediów, w kolejności największej wierności, a serwer odpowiada za pomocą najlepszego dostępnego formatu.

Monikers adresów URL obsługują negocjacje typu multimediów jako sposób na klientów internetowych i serwerów, aby uzgodnić formaty, które mają być używane podczas pobierania danych w BindToStorage operacji. Aby obsługiwać negocjacje typu nośnika, klient implementuje interfejs IEnumFORMATETC i wywołuje funkcję RegisterFormatEnumerator w celu zarejestrowania go w kontekście powiązania. Moduł wyliczający formatuje listę formatów, które klient może zaakceptować. Moniker adresu URL tłumaczy te formaty na typy multimediów podczas wiązania z adresami URL PROTOKOŁU HTTP.

Możliwe typy multimediów żądane przez klienta są reprezentowane przez monikers adresów URL za pośrednictwem FORMATETC struktury dostępne z IEnumFORMATETC wyliczający zarejestrowany przez obiekt wywołujący w kontekście powiązania: Każdy FORMATETC określa format schowka identyfikujący typ nośnika. Na przykład poniższy fragment kodu określa, że typ nośnika to PostScript.

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

Klient może ustawić format schowka na specjalny typ nośnika CF_NULL wskazać, że należy pobrać domyślny typ nośnika zasobu wskazywanego przez adres URL. Ten format jest zazwyczaj ostatnim, w którym klient jest zainteresowany. Jeśli żaden moduł wyliczający nie jest zarejestrowany w kontekście powiązania, moniker adresu URL działa tak, jakby moduł wyliczający zawierający jeden FORMATETC z cfFormat=CF_NULL jest dostępny, automatycznie pobierając domyślny typ nośnika.

Niezależnie od typu nośnika, który ma być używany, klient jest powiadamiany o wyborze za pomocą pformatetc argumentu na jego IBindStatusCallback::OnDataAvailable metody. Wywołanie zwrotne odbywa się w kontekście wywołania klienta w celu BindToStorage.

Nuta

Jeśli odebrana zawartość ma nierozpoznany typ nośnika, klient automatycznie wywołuje RegisterMediaTypes, aby zarejestrować nowy typ.

 

adres URL