Delen via


Overzicht van WCF-web-HTTP-programmeermodel

Het WCF-WEB HTTP-programmeermodel (Windows Communication Foundation) biedt de basiselementen die nodig zijn voor het bouwen van WEB HTTP-services met WCF. WCF WEB HTTP-services zijn ontworpen voor toegang tot de breedste reeks mogelijke clients, waaronder webbrowsers en hebben de volgende unieke vereisten:

  • URI's en URI-verwerkings-URI's spelen een centrale rol in het ontwerp van WEB HTTP-services. Het WCF WEB HTTP-programmeermodel maakt gebruik van de UriTemplate en UriTemplateTable klassen om URI-verwerkingsmogelijkheden te bieden.

  • Ondersteuning voor GET- en POST-bewerkingen WEB HTTP-services maken gebruik van het GET-werkwoord voor het ophalen van gegevens, naast verschillende aanroepende werkwoorden voor het wijzigen van gegevens en externe aanroepen. Het WCF WEB HTTP-programmeermodel maakt gebruik van de WebGetAttribute en WebInvokeAttribute om servicebewerkingen te koppelen aan zowel GET als andere HTTP-werkwoorden, zoals PUT, POST en DELETE.

  • Meerdere gegevensindelingen webservices verwerken naast SOAP-berichten allerlei soorten gegevens. Het WCF WEB HTTP-programmeermodel maakt gebruik van en WebHttpBindingWebHttpBehavior ondersteunt veel verschillende gegevensindelingen, waaronder XML-documenten, JSON-gegevensobjecten en streams van binaire inhoud, zoals afbeeldingen, videobestanden of tekst zonder opmaak.

Het WCF WEB HTTP-programmeermodel breidt het bereik van WCF uit om webscenario's te behandelen die WEB HTTP-services, AJAX- en JSON-services en syndicatiefeeds (ATOM/RSS) omvatten. Zie AJAX-integratie en JSON-ondersteuning voor meer informatie over AJAX- en JSON-services. Zie WCF Syndication Overview voor meer informatie over Syndication.

Er zijn geen extra beperkingen voor de typen gegevens die kunnen worden geretourneerd vanuit een WEB HTTP-service. Elk serialiseerbaar type kan worden geretourneerd vanuit een WEB HTTP-servicebewerking. Omdat WEB HTTP-servicebewerkingen kunnen worden aangeroepen door een webbrowser, is er een beperking voor welke gegevenstypen in een URL kunnen worden opgegeven. Zie de sectie Parameters en URL's van de UriTemplate-queryreeks hieronder voor meer informatie over welke typen standaard worden ondersteund. Het standaardgedrag kan worden gewijzigd door uw eigen T:System.ServiceModel.Dispatcher.QueryStringConverter-implementatie op te geven die aangeeft hoe de parameters die zijn opgegeven in een URL moeten worden geconverteerd naar het werkelijke parametertype. Zie QueryStringConverter voor meer informatie

Let op

Services die zijn geschreven met het WCF WEB HTTP-programmeermodel gebruiken geen SOAP-berichten. Omdat SOAP niet wordt gebruikt, kunnen de beveiligingsfuncties van WCF niet worden gebruikt. U kunt echter transportgebaseerde beveiliging gebruiken door uw service te hosten met HTTPS. Zie Overzicht van beveiliging voor meer informatie over WCF-beveiliging

Waarschuwing

Het installeren van de WebDAV-extensie voor IIS kan ertoe leiden dat web-HTTP-services een HTTP 405-fout retourneren wanneer de WebDAV-extensie probeert alle PUT-aanvragen te verwerken. U kunt dit probleem omzeilen door de WebDAV-extensie te verwijderen of de WebDAV-extensie voor uw website uit te schakelen. Zie IIS en WebDav voor meer informatie

URI-verwerking met UriTemplate en UriTemplateTable

URI-sjablonen bieden een efficiƫnte syntaxis voor het uitdrukken van grote sets met structureel vergelijkbare URI's. Met de volgende sjabloon wordt bijvoorbeeld de set van alle drie de segment-URI's weergegeven die beginnen met 'a' en eindigen op 'c' zonder rekening te houden met de waarde van het tussenliggende segment: a/{segment}/c

In deze sjabloon worden URI's als volgt beschreven:

  • a/x/c

  • a/y/c

  • a/z/c

  • enzovoort.

In deze sjabloon geeft de accolade notatie ({segment}) een variabele segment aan in plaats van een letterlijke waarde.

.NET Framework biedt een API voor het werken met URI-sjablonen met de naam UriTemplate. UriTemplates hiermee kunt u het volgende doen:

  • U kunt een van de Bind methoden aanroepen met een set parameters om een volledig gesloten URI te produceren die overeenkomt met de sjabloon. Dit betekent dat alle variabelen in de URI-sjabloon worden vervangen door werkelijke waarden.

  • U kunt () aanroepen Matchmet een kandidaat-URI, die een sjabloon gebruikt om een kandidaat-URI op te splitsen in de samenstellende onderdelen en een woordenlijst retourneert die de verschillende onderdelen van de URI bevat die zijn gelabeld volgens de variabelen in de sjabloon.

  • Bind() en Match() zijn inverses, zodat u (Bindx) kunt aanroepen Matchen terugkeren met dezelfde omgeving waarmee u bent begonnen.

Er zijn vaak (met name op de server, waarbij het verzenden van een aanvraag naar een servicebewerking op basis van de URI nodig is) die u wilt bijhouden van UriTemplate een set objecten in een gegevensstructuur die elk van de ingesloten sjablonen onafhankelijk kan aanpakken. UriTemplateTable vertegenwoordigt een set URI-sjablonen en selecteert de beste overeenkomst op basis van een set sjablonen en een kandidaat-URI. Dit is niet gekoppeld aan een bepaalde netwerkstack (WCF inbegrepen), zodat u deze waar nodig kunt gebruiken.

Het WCF-servicemodel maakt gebruik van UriTemplate en UriTemplateTable koppelt servicebewerkingen aan een set URI's die worden beschreven door een UriTemplate. Een servicebewerking is gekoppeld aan een UriTemplate, met behulp van de WebGetAttribute of de WebInvokeAttribute. Zie UriTemplate en UriTemplateTable voor meer informatie over UriTemplate en UriTemplateTable

WebGet- en WebInvoke-kenmerken

WCF WEB HTTP-services maken gebruik van het ophalen van werkwoorden (bijvoorbeeld HTTP GET) naast verschillende aanroepende werkwoorden (bijvoorbeeld HTTP POST, PUT en DELETE). Met het WCF WEB HTTP-programmeermodel kunnen serviceontwikkelaars de URI-sjabloon en het werkwoord beheren dat is gekoppeld aan hun servicebewerkingen met de WebGetAttribute en WebInvokeAttribute. WebInvokeAttribute Hiermee WebGetAttribute kunt u bepalen hoe afzonderlijke bewerkingen worden gebonden aan URI's en de HTTP-methoden die aan deze URI's zijn gekoppeld. Voeg bijvoorbeeld de volgende code toe WebGetAttribute en WebInvokeAttribute voeg deze toe.

[ServiceContract]
interface ICustomer
{
  //"View It"

  [WebGet]
  Customer GetCustomer():

  //"Do It"
    [WebInvoke]
  Customer UpdateCustomerName( string id,
                               string newName );
}

Met de voorgaande code kunt u de volgende HTTP-aanvragen indienen.

GET /GetCustomer

POST /UpdateCustomerName

WebInvokeAttribute standaard ingesteld op POST, maar u kunt deze ook gebruiken voor andere werkwoorden.

[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 );
}

Als u een volledig voorbeeld wilt zien van een WCF-service die gebruikmaakt van het WCF WEB HTTP-programmeermodel, raadpleegt u: Een eenvoudige WCF-web-HTTP-service maken

UriTemplate-queryreeksparameters en -URL's

Webservices kunnen worden aangeroepen vanuit een webbrowser door een URL te typen die is gekoppeld aan een servicebewerking. Deze servicebewerkingen kunnen queryreeksparameters gebruiken die moeten worden opgegeven in een tekenreeksformulier binnen de URL. In de volgende tabel ziet u de typen die kunnen worden doorgegeven binnen een URL en de gebruikte indeling.

Type Indeling
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 notatie is niet vereist)
Double -1.79769313486232e308 - 1.79769313486232e308 (exponent notatie is niet vereist)
Char Een willekeurig teken
Decimal Een decimaalteken in standaard notatie (geen exponent)
Boolean Waar of Onwaar (niet hoofdlettergevoelig)
String Een tekenreeks (null-tekenreeks wordt niet ondersteund en er wordt geen escape uitgevoerd)
DateTime MM/DD/JJJJ

MM/DD/JJJJ UU:MM:SS [AM|PM]

Maanddagjaar

Maanddag jaar UU:MM:SS [AM|PM]
TimeSpan DD.UU:MM:SS

Where DD = Days, HH = Hours, MM = minutes, SS = Seconds
Guid Een GUID, bijvoorbeeld:

936DA01F-9ABD-4d9d-80C7-02AF85C822A8
DateTimeOffset MM/DD/JJJJ UU:MM:SS MM:SS MM:SS

Where DD = Days, HH = Hours, MM = minutes, SS = Seconds
Opsommingen De opsommingswaarde bijvoorbeeld, waarmee de opsomming wordt gedefinieerd, zoals wordt weergegeven in de volgende code.

public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

Een van de afzonderlijke opsommingswaarden (of de bijbehorende gehele getallen) kan worden opgegeven in de querytekenreeks.
Typen die een TypeConverterAttribute type hebben dat het type kan converteren naar en van een tekenreeksweergave. Afhankelijk van het type conversieprogramma.

Indelingen en het WCF WEB HTTP-programmeermodel

Het WCF WEB HTTP-programmeermodel heeft nieuwe functies om te werken met veel verschillende gegevensindelingen. Op de bindingslaag kunnen de WebHttpBinding volgende verschillende soorten gegevens lezen en schrijven:

  • XML

  • JSON

  • Ondoorzichtige binaire streams

Dit betekent dat het WCF WEB HTTP-programmeermodel elk type gegevens kan verwerken, maar u kunt programmeren op Streambasis van .

.NET Framework 3.5 biedt ondersteuning voor JSON-gegevens (AJAX) en syndicatiefeeds (inclusief ATOM en RSS). Zie WCF Web HTTP-opmaak, WCF Syndication Overview en AJAX Integration and JSON Support voor meer informatie over deze functies.

WCF WEB HTTP-programmeermodel en -beveiliging

Omdat het WCF WEB HTTP-programmeermodel de WS-*-protocollen niet ondersteunt, is de enige manier om een WCF WEB HTTP-service te beveiligen de service beschikbaar te maken via HTTPS via SSL. Zie SSL implementeren in IIS voor meer informatie over het instellen van SSL met IIS 7.0.

Problemen met het WCF WEB HTTP-programmeermodel oplossen

Bij het aanroepen van WCF WEB HTTP-services met behulp van een ChannelFactoryBase<TChannel> om een kanaal te maken, wordt de WebHttpBehaviorEndpointAddress set in het configuratiebestand gebruikt, zelfs als een andere EndpointAddress wordt doorgegeven aan de ChannelFactoryBase<TChannel>.

Zie ook