Sdílet prostřednictvím


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() a Match() jsou inverzní funkce, takže můžete volat Match( Bindx) 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 .

Viz také