Přehled programovacího modelu WEBOVÉHO PROTOKOLU HTTP WCF
Programovací model WINDOWS Communication Foundation (WCF) WEB HTTP poskytuje základní prvky potřebné k vytváření služeb WEB HTTP pomocí WCF. Služby WCF WEB HTTP jsou navržené tak, aby měly přístup k široké škále možných klientů, včetně webových prohlížečů, a mají následující jedinečné požadavky:
URI a jejich zpracování hrají ústřední roli při návrhu webových služeb HTTP. Programovací model WCF WEB HTTP používá třídy UriTemplate a UriTemplateTable k zajištění možností zpracování identifikátoru URI.
Podpora operací GET a POST Webové HTTP služby využívají metodu GET pro získávání dat, kromě různých metod pro úpravu dat a vzdálené vyvolání. Programovací model WCF WEB HTTP používá WebGetAttribute a WebInvokeAttribute k přidružení operací služby k operacím GET i dalším příkazům HTTP, jako je PUT, POST a DELETE.
Více formátů dat Webové služby zpracovávají mnoho druhů dat kromě zpráv SOAP. Programovací model WCF WEB HTTP používá WebHttpBinding a WebHttpBehavior k podpoře mnoha různých datových formátů, včetně dokumentů XML, datového objektu JSON a streamů binárního obsahu, jako jsou obrázky, videosoubory nebo prostý text.
Programovací model WCF WEB HTTP rozšiřuje dosah WCF tak, aby zahrnoval scénáře webového stylu, které zahrnují webové služby HTTP, služby AJAX a JSON a informační kanály Syndication (ATOM/RSS). Další informace o službách AJAX a JSON najdete v tématu Integrace AJAX a podpora JSON. Další informace o syndikaci naleznete v tématu WCF Syndication Overview.
Neexistují žádná další omezení pro typy dat, které lze vrátit ze služby HTTP webu. Jakýkoli serializovatelný typ lze vrátit z operace webové služby HTTP. Vzhledem k tomu, že operace služby WEB HTTP lze vyvolat webovým prohlížečem, existuje omezení, jaké datové typy lze zadat v adrese URL. Další informace o typech, které jsou ve výchozím nastavení podporovány, najdete v části parametry řetězce dotazu UriTemplate a adresy URL níže. Výchozí chování lze změnit zadáním vlastní implementace T:System.ServiceModel.Dispatcher.QueryStringConverter, která určuje, jak převést parametry zadané v adrese URL na skutečný typ parametru. Další informace najdete v tématu QueryStringConverter
Opatrnost
Služby napsané pomocí programovacího modelu HTTP WCF WEB nepoužívají zprávy SOAP. Vzhledem k tomu, že se protokol SOAP nepoužívá, nelze použít funkce zabezpečení poskytované WCF. Zabezpečení na základě přenosu ale můžete použít hostováním služby pomocí protokolu HTTPS. Další informace o zabezpečení WCF naleznete v tématu Přehled zabezpečení.
Varování
Instalace rozšíření WebDAV pro službu IIS může způsobit, že webové služby HTTP vrátí chybu HTTP 405, protože se rozšíření WebDAV pokusí zpracovat všechny požadavky PUT. Chcete-li tento problém vyřešit, můžete odinstalovat rozšíření WebDAV nebo zakázat rozšíření WebDAV pro váš web. Další informace naleznete v tématu IIS a WebDav.
Zpracování identifikátoru URI pomocí UriTemplate a UriTemplateTable
Šablony identifikátorů URI poskytují efektivní syntaxi pro vyjádření velkých sad strukturálně podobných identifikátorů URI. Například následující šablona vyjadřuje sadu všech identifikátorů URI se třemi segmenty, které začínají na "a" a končí na "c", bez ohledu na hodnotu zprostředkujícího segmentu: a/{segment}/c.
Tato šablona popisuje identifikátory URI jako následující:
a/x/c
a/y/c
a/z/c
a tak dále.
V této šabloně se složená závorka ("{segment}") používá k označení proměnného segmentu místo literálové hodnoty.
Rozhraní .NET Framework poskytuje rozhraní API pro práci se šablonami identifikátorů URI nazývané UriTemplate.
UriTemplates
vám umožní provádět následující akce:
Můžete zavolat jednu z
Bind
metod se sadou parametrů pro vytvoření zcela uzavřeného URI, který odpovídá šabloně. To znamená, že všechny proměnné v šabloně identifikátoru URI se nahradí skutečnými hodnotami.Můžete volat
Match
() s kandidátským identifikátorem URI, který používá šablonu k rozdělení kandidátního identifikátoru URI do jeho základních částí a vrátí slovník, který obsahuje různé části identifikátoru URI označeného podle proměnných v šabloně.Bind
() aMatch
() jsou inverzní funkce, takže můžete volatMatch
(Bind
(x)) a vrátit se do stejného prostředí, ze kterého jste začali.
Mnohokrát se stává (zejména na serveru, kde je nezbytné odeslat požadavek na operaci služby na základě URI), kdy chcete sledovat sadu objektů UriTemplate v datové struktuře, která umožňuje nezávislé řešení pro každou z obsažených šablon. UriTemplateTable představuje sadu šablon identifikátorů URI a vybere nejlepší shodu vzhledem k sadě šablon a kandidátského identifikátoru URI. Není přidružené k žádnému konkrétnímu síťovému zásobníku (včetně WCF), takže ho můžete používat kdekoliv, kde je to nutné.
Model služby WCF využívá UriTemplate a UriTemplateTable k přidružení operací služby k sadě identifikátorů URI popsaných UriTemplate. Operace služby je přidružena k UriTemplatepomocí WebGetAttribute nebo WebInvokeAttribute. Další informace o UriTemplate a UriTemplateTablenajdete v UriTemplate a UriTemplateTable.
Atributy WebGet a WebInvoke
Služby WCF WEB HTTP využívají kromě různých příkazů vyvolání (například HTTP GET) také příkazy načítání (například HTTP POST, PUT a DELETE). Programovací model WCF WEB HTTP umožňuje vývojářům služeb řídit šablonu identifikátoru URI i sloveso přidružené k operacím jejich služby s WebGetAttribute a WebInvokeAttribute. WebGetAttribute a WebInvokeAttribute umožňují řídit, jak se jednotlivé operace vázají na identifikátory URI a metody HTTP přidružené k těmto identifikátorům URI. Například přidání WebGetAttribute a WebInvokeAttribute v následujícím kódu.
[ServiceContract]
interface ICustomer
{
//"View It"
[WebGet]
Customer GetCustomer():
//"Do It"
[WebInvoke]
Customer UpdateCustomerName( string id,
string newName );
}
Předchozí kód umožňuje provádět následující požadavky HTTP.
GET /GetCustomer
POST /UpdateCustomerName
WebInvokeAttribute výchozí nastavení je POST, ale můžete ho použít i pro jiná slovesa.
[ServiceContract]
interface ICustomer
{
//"View It" -> HTTP GET
[WebGet( UriTemplate="customers/{id}" )]
Customer GetCustomer( string id ):
//"Do It" -> HTTP PUT
[WebInvoke( UriTemplate="customers/{id}", Method="PUT" )]
Customer UpdateCustomer( string id, Customer newCustomer );
}
Kompletní ukázku služby WCF, která používá programovací model WCF WEB HTTP, naleznete v tématu Postupy: Vytvoření základní webové služby HTTP WCF.
Parametry řetězce dotazu UriTemplate a adresy URL
Webové služby lze volat z webového prohlížeče zadáním adresy URL, která je přidružena k operaci služby. Tyto operace služby mohou obsahovat parametry řetězce dotazu, které musí být zadány v řetězcovém formuláři v rámci adresy URL. Následující tabulka uvádí typy, které lze předat v adrese URL a použitém formátu.
Typ | Formát |
---|---|
Byte | 0 - 255 |
SByte | -128 - 127 |
Int16 | -32768 - 32767 |
Int32 | -2,147,483,648 - 2,147,483,647 |
Int64 | -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807 |
UInt16 | 0 - 65535 |
UInt32 | 0 - 4,294,967,295 |
UInt64 | 0 - 18,446,744,073,709,551,615 |
Single | -3.402823e38 - 3.402823e38 (není nutný exponenciální zápis) |
Double | -1,79769313486232e308 - 1,79769313486232e308 (exponentová notace není vyžadována) |
Char | Libovolný jeden znak |
Decimal | Libovolné desetinné místo ve standardním zápisu (bez exponentu) |
Boolean | Pravda nebo Nepravda (bez rozlišení velkých a malých písmen) |
String | Jakýkoli řetězec (řetězec s hodnotou null není podporován a není použita žádná escape sekvence) |
DateTime | MM/DD/YYYY MM/DD/YYYY HH:MM:SS [AM|PM] Den Měsíc Rok Rok dne měsíce HH:MM:SS [AM|PM] |
TimeSpan | DD.HH:MM:SS Where DD = Days, HH = Hours, MM = minutes, SS = Seconds |
Guid | Identifikátor GUID, například: 936DA01F-9ABD-4d9d-80C7-02AF85C822A8 |
DateTimeOffset | MM/DD/YYYY HH:MM:SS MM:SS Where DD = Days, HH = Hours, MM = minutes, SS = Seconds |
Výčty | Například hodnota výčtu, která definuje výčet, jak je znázorněno v následujícím kódu.public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; V řetězci dotazu může být zadána libovolná jednotlivá hodnota výčtu (nebo jejich odpovídající celočíselné hodnoty). |
Typy, které mají TypeConverterAttribute a mohou převést typ na a z řetězcové reprezentace. |
Závisí na převaděči typů. |
Formáty a programovací model HTTP WCF WEB
Programovací model WCF WEB HTTP má nové funkce pro práci s mnoha různými formáty dat. Ve vrstvě vazby může WebHttpBinding číst a zapisovat následující typy dat:
- XML
- JSON
- Neprůhledné binární proudy
To znamená, že programovací model WCF WEB HTTP dokáže zpracovat jakýkoli typ dat, ale můžete programovat proti Stream.
.NET Framework 3.5 poskytuje podporu pro data JSON (AJAX) a také kanály syndikace (včetně ATOM a RSS). Další informace o těchto funkcích naleznete v tématu Webové formátování HTTP WCF, WCF Syndication Overviewa AJAX Integration and JSON Support.
Programovací model a zabezpečení WCF WEB HTTP
Vzhledem k tomu, že programovací model WCF WEB HTTP nepodporuje protokoly WS-*, jediným způsobem, jak zabezpečit službu WCF WEB HTTP, je zveřejnit službu přes PROTOKOL HTTPS pomocí PROTOKOLU SSL. Další informace o nastavení PROTOKOLU SSL se službou IIS 7.0 naleznete v tématu Postup implementace SSL ve službě IIS.
Řešení potíží s programovacím modelem WCF WEB HTTP
Při volání služeb WCF WEB HTTP pomocí ChannelFactoryBase<TChannel> k vytvoření kanálu, WebHttpBehavior používá EndpointAddress nastavenou v konfiguračním souboru, i když je do ChannelFactoryBase<TChannel>předán jiný EndpointAddress .
Viz také
- syndikace WCF
- programovacího objektového modelu WEBOVÉho protokolu HTTP WCF
- programovací model webového protokolu HTTP WCF