Översikt över WCF Web HTTP Programming Model
WCF WEB HTTP-programmeringsmodellen (Windows Communication Foundation) tillhandahåller de grundläggande element som krävs för att skapa WEB HTTP-tjänster med WCF. WCF WEB HTTP-tjänster är utformade för att nås av bredast möjliga klienter, inklusive webbläsare och har följande unika krav:
URI:er och URI-bearbetnings-URI :er spelar en central roll i utformningen av HTTP-webbtjänster. WCF WEB HTTP-programmeringsmodellen använder klasserna UriTemplate och UriTemplateTable för att tillhandahålla URI-bearbetningsfunktioner.
Stöd för GET- och POST-åtgärder WEB HTTP-tjänster använder GET-verbet för datahämtning, förutom olika anropande verb för datamodifiering och fjärranrop. WCF WEB HTTP-programmeringsmodellen använder WebGetAttribute och WebInvokeAttribute för att associera tjänståtgärder med både GET och andra HTTP-verb som PUT, POST och DELETE.
Flera dataformat Webbtjänster bearbetar många typer av data utöver SOAP-meddelanden. WCF WEB HTTP-programmeringsmodellen använder WebHttpBinding och WebHttpBehavior för att stödja många olika dataformat, inklusive XML-dokument, JSON-dataobjekt och strömmar av binärt innehåll, till exempel bilder, videofiler eller oformaterad text.
WCF WEB HTTP-programmeringsmodellen utökar räckvidden för WCF för att täcka scenarier i webbformat som inkluderar WEB HTTP-tjänster, AJAX- och JSON-tjänster och Syndikeringsfeeds (ATOM/RSS). Mer information om AJAX- och JSON-tjänster finns i AJAX-integrering och JSON-support. Mer information om syndikering finns i Översikt över WCF-syndikering.
Det finns inga extra begränsningar för vilka typer av data som kan returneras från en WEB HTTP-tjänst. Alla serialiserbara typer kan returneras från en WEB HTTP-tjänståtgärd. Eftersom WEB HTTP-tjänståtgärder kan anropas av en webbläsare finns det en begränsning för vilka datatyper som kan anges i en URL. Mer information om vilka typer som stöds som standard finns i avsnittet UriTemplate Query String Parameters and URLs (UriTemplate Query String Parameters and URL:er ) nedan. Standardbeteendet kan ändras genom att ange din egen T:System.ServiceModel.Dispatcher.QueryStringConverter-implementering som anger hur du konverterar parametrarna som anges i en URL till den faktiska parametertypen. Mer information finns i QueryStringConverter
Varning
Tjänster som skrivits med WCF WEB HTTP-programmeringsmodellen använder inte SOAP-meddelanden. Eftersom SOAP inte används kan inte de säkerhetsfunktioner som tillhandahålls av WCF användas. Du kan dock använda transportbaserad säkerhet genom att vara värd för din tjänst med HTTPS. Mer information om WCF-säkerhet finns i Säkerhetsöversikt
Varning
Om du installerar WebDAV-tillägget för IIS kan webb-HTTP-tjänster returnera ett HTTP 405-fel när WebDAV-tillägget försöker hantera alla PUT-begäranden. Du kan lösa det här problemet genom att avinstallera WebDAV-tillägget eller inaktivera WebDAV-tillägget för webbplatsen. Mer information finns i IIS och WebDav
URI-bearbetning med UriTemplate och UriTemplateTable
URI-mallar ger en effektiv syntax för att uttrycka stora uppsättningar strukturellt liknande URI:er. Följande mall uttrycker till exempel uppsättningen med alla tre segment-URI:er som börjar med "a" och slutar med "c" utan hänsyn till värdet för det mellanliggande segmentet: a/{segment}/c
Den här mallen beskriver URI:er som följande:
a/x/c
a/y/c
a/z/c
och så vidare.
I den här mallen anger klammerparentes notationen ("{segment}") ett variabelsegment i stället för ett literalvärde.
.NET Framework tillhandahåller ett API för att arbeta med URI-mallar som kallas UriTemplate. UriTemplates
gör att du kan göra följande:
Du kan anropa någon av
Bind
metoderna med en uppsättning parametrar för att skapa en helt stängd URI som matchar mallen. Det innebär att alla variabler i URI-mallen ersätts med faktiska värden.Du kan anropa
Match
() med en kandidat-URI, som använder en mall för att dela upp en kandidat-URI i dess komponenter och returnerar en ordlista som innehåller de olika delarna av URI:n som är märkta enligt variablerna i mallen.Bind
() ochMatch
() är inverser så att du kan anropaMatch
( (Bind
x ) ) och komma tillbaka med samma miljö som du började med.
Det finns många gånger (särskilt på servern, där det är nödvändigt att skicka en begäran till en tjänståtgärd baserat på URI:n) som du vill hålla reda på en uppsättning UriTemplate objekt i en datastruktur som oberoende kan hantera var och en av de inneslutna mallarna. UriTemplateTable representerar en uppsättning URI-mallar och väljer den bästa matchningen med en uppsättning mallar och en kandidat-URI. Detta är inte kopplat till någon viss nätverksstack (WCF ingår) så du kan använda den när det behövs.
WCF-tjänstmodellen använder UriTemplate och UriTemplateTable associerar tjänståtgärder med en uppsättning URI:er som beskrivs av en UriTemplate. En tjänståtgärd är associerad med en UriTemplate, med antingen WebGetAttribute eller WebInvokeAttribute. Mer information om UriTemplate och UriTemplateTablefinns i UriTemplate och UriTemplateTable
WebGet- och WebInvoke-attribut
WCF WEB HTTP-tjänster använder sig av hämtningsverb (till exempel HTTP GET) utöver olika anropande verb (till exempel HTTP POST, PUT och DELETE). Med WCF WEB HTTP-programmeringsmodellen kan tjänstutvecklare styra både URI-mallen och verbet som är associerade med deras tjänståtgärder med WebGetAttribute och WebInvokeAttribute. Med WebGetAttribute och WebInvokeAttribute kan du styra hur enskilda åtgärder binds till URI:er och DE HTTP-metoder som är associerade med dessa URI:er. Du kan till exempel lägga till WebGetAttribute och WebInvokeAttribute i följande kod.
[ServiceContract]
interface ICustomer
{
//"View It"
[WebGet]
Customer GetCustomer():
//"Do It"
[WebInvoke]
Customer UpdateCustomerName( string id,
string newName );
}
Med föregående kod kan du göra följande HTTP-begäranden.
GET /GetCustomer
POST /UpdateCustomerName
WebInvokeAttribute standardvärdet postas men du kan också använda det för andra verb.
[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 );
}
Ett fullständigt exempel på en WCF-tjänst som använder WCF WEB HTTP-programmeringsmodellen finns i Så här skapar du en grundläggande WCF-webb-HTTP-tjänst
UriTemplate Frågesträngsparametrar och URL:er
Webbtjänster kan anropas från en webbläsare genom att skriva en URL som är associerad med en tjänståtgärd. Dessa tjänståtgärder kan innehålla frågesträngsparametrar som måste anges i ett strängformulär i URL:en. I följande tabell visas de typer som kan skickas i en URL och det format som används.
Typ | Format |
---|---|
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 notation krävs inte) |
Double | -1.79769313486232e308 - 1.79769313486232e308 (exponent notation krävs inte) |
Char | Valfritt enskilt tecken |
Decimal | Alla decimaler i standard notation (ingen exponent) |
Boolean | Sant eller Falskt (skiftlägesokänsligt) |
String | Alla strängar (null-sträng stöds inte och ingen undflyende görs) |
DateTime | MM/DD/ÅÅÅÅ MM/DD/ÅÅÅÅÅ HH:MM:SS [AM|PM] Månad, dag år Month Day Year HH:MM:SS [AM|PM] |
TimeSpan | DD.HH:MM:SS Där DD = Dagar, HH = Timmar, MM = minuter, SS = Sekunder |
Guid | Ett GUID, till exempel: 936DA01F-9ABD-4d9d-80C7-02AF85C822A8 |
DateTimeOffset | MM/DD/ÅÅÅÅÅ HH:MM:SS MM:SS Där DD = Dagar, HH = Timmar, MM = minuter, SS = Sekunder |
Uppräkningar | Uppräkningsvärdet, till exempel, som definierar uppräkningen enligt följande kod.public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; Alla enskilda uppräkningsvärden (eller motsvarande heltalsvärden) kan anges i frågesträngen. |
Typer som har en TypeConverterAttribute som kan konvertera typen till och från en strängrepresentation. |
Beror på typkonverteraren. |
Format och WCF WEB HTTP-programmeringsmodellen
WCF WEB HTTP-programmeringsmodellen har nya funktioner som fungerar med många olika dataformat. På bindningslagret WebHttpBinding kan läsa och skriva följande olika typer av data:
XML
JSON
Täckande binära strömmar
Det innebär att WCF WEB HTTP-programmeringsmodellen kan hantera alla typer av data, men du kanske programmerar mot Stream.
.NET Framework 3.5 ger stöd för JSON-data (AJAX) samt syndikeringsfeeds (inklusive ATOM och RSS). Mer information om dessa funktioner finns i WCF Web HTTP-formatering, översikt över WCF Syndication och AJAX-integrering och JSON-stöd.
WCF WEB HTTP-programmeringsmodell och säkerhet
Eftersom WCF WEB HTTP-programmeringsmodellen inte stöder WS-*-protokollen är det enda sättet att skydda en WCF WEB HTTP-tjänst att exponera tjänsten via HTTPS med hjälp av SSL. Mer information om hur du konfigurerar SSL med IIS 7.0 finns i Implementera SSL i IIS.
Felsöka WCF WEB HTTP-programmeringsmodellen
När du anropar WCF WEB HTTP-tjänster med hjälp av en ChannelFactoryBase<TChannel> för att skapa en kanal, WebHttpBehavior använder EndpointAddress uppsättningen i konfigurationsfilen även om en annan EndpointAddress skickas ChannelFactoryBase<TChannel>till .