Přehled modelu webového programování HTTP služby 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:
Identifikátory URI a identifikátory URI pro zpracování identifikátorů URI hrají ústřední roli při návrhu služeb WEB HTTP. Programovací model WCF WEB HTTP používá UriTemplate a UriTemplateTable třídy k poskytování možností zpracování identifikátoru URI.
Podpora služeb HTTP operací GET a POST využívá příkaz GET pro načítání dat, kromě různých příkazů vyvolání pro úpravy dat a vzdálené vyvolání. Programovací model WCF WEB HTTP používá WebGetAttributeWebInvokeAttribute a přidružuje operace služby k operacím GET i dalším příkazům HTTP, jako je PUT, POST a DELETE.
Mnoho druhů dat kromě zpráv SOAP zpracovává více formátů webových služeb. Programovací model WCF WEB HTTP používá WebHttpBinding a WebHttpBehavior podporuje mnoho různých formátů dat, včetně dokumentů XML, datového objektu JSON a datových proudů 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 aJSONch Další informace o syndikaci najdete v tématu Přehled syndikace WCF.
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 a adresy URL dotazu UriTemplate 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 viz QueryStringConverter.
Upozornění
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í
Upozorňující
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 najdete 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ě označuje složená závorka ({segment}) místo literálové hodnoty segment proměnné.
Rozhraní .NET Framework poskytuje rozhraní API pro práci se šablonami identifikátorů URI.UriTemplate UriTemplates
umožňuje provádět následující akce:
Můžete volat jednu z
Bind
metod se sadou parametrů a vytvořit plně uzavřený identifikátor 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é podle proměnných v šabloně.Bind
() aMatch
() jsou inverzní funkce, takže můžete volatMatch
(Bind
x) a vrátit se se stejným prostředím, se kterým jste začali.
Existuje mnohokrát (zejména na serveru, kdy odeslání požadavku na operaci služby na základě identifikátoru URI je nezbytné), které chcete sledovat sadu UriTemplate objektů v datové struktuře, která může nezávisle řešit všechny obsažené šablony. UriTemplateTable představuje sadu šablon identifikátorů URI a vybere nejlepší shodu s danou sadou šablon a kandidátským identifikátorem URI. To není přidružené k žádnému konkrétnímu síťovému zásobníku (zahrnuté WCF), takže ho můžete používat všude, kde je to potřeba.
Model služby WCF využívá UriTemplate a UriTemplateTable přidružuje operace služby k sadě identifikátorů URI popsaných pomocí UriTemplate. Operace služby je přidružena UriTemplatek , pomocí WebGetAttributeWebInvokeAttributenebo . Další informace o UriTemplate tabulce UriTemplateTableUriTemplate 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 jak šablonu identifikátoru URI, tak příkaz přidružený k operacím služby s a WebGetAttributeWebInvokeAttribute. WebInvokeAttribute A WebGetAttribute umožňuje řídit, jak se jednotlivé operace vázají na identifikátory URI a metody HTTP přidružené k těmto identifikátorům URI. Můžete například přidat WebGetAttribute a WebInvokeAttribute do následujícího 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í hodnota je POST, ale můžete ji použít i pro jiné příkazy.
[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 );
}
Pokud chcete zobrazit úplnou ukázku služby WCF, která používá programovací model WCF WEB HTTP, přečtěte si téma 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 (exponent notace není nutná) |
Double | -1,79769313486232e308 - 1,79769313486232e308 (exponent notace není nutná) |
Char | Libovolný jeden znak |
Decimal | Libovolné desetinné místo ve standardním zápisu (bez exponentu) |
Boolean | True nebo False (nerozlišují malá a velká písmena) |
String | Jakýkoli řetězec (řetězec s hodnotou null není podporován a není proveden žádný escaping) |
DateTime | MM/DD/RRRR MM/DD/YYYY HH:MM:SS [AM|PM] Month Day Year 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é mohou TypeConverterAttribute převést typ na řetězcovou reprezentaci 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ě WebHttpBinding vazby může číst a zapisovat následující typy dat:
XML
JSON
Neprůpěné binární streamy
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 otěchtoch materiálech a platformách AJAX naleznete v tématu Formátování HTTP webu WCF, přehled syndikace WCF a podpora JSON.
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í 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 se používá EndpointAddress sada v konfiguračním souboru i v případě, že je do souboru ChannelFactoryBase<TChannel>předán jiný EndpointAddress .