Dela via


Ö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() och Match() är inverser så att du kan anropa Match( ( Bindx ) ) 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 .

Se även