WCF AJAX-services maken zonder ASP.NET
Windows Communication Foundation (WCF) AJAX-services kunnen worden geopend vanaf elke webpagina met JavaScript, zonder dat ASP.NET AJAX is vereist. In dit onderwerp wordt beschreven hoe u een dergelijke WCF-service maakt.
Zie WCF-services maken voor ASP.NET AJAX voor instructies over het gebruik van WCF met ASP.NET AJAX.
Er zijn drie onderdelen voor het maken van een WCF AJAX-service:
Een AJAX-eindpunt maken dat toegankelijk is vanuit de browser.
Een ajax-compatibel servicecontract maken.
Toegang tot WCF AJAX-services.
Een AJAX-eindpunt maken
De eenvoudigste manier om AJAX-ondersteuning in te schakelen in een WCF-service is door het WebServiceHostFactory in het .svc-bestand te gebruiken dat is gekoppeld aan de service, zoals in het volgende voorbeeld.
<%ServiceHost
language=c#
Debug="true"
Service="Microsoft.Ajax.Samples.CityService"
Factory=System.ServiceModel.Activation.WebServiceHostFactory
%>
U kunt ook configuratie gebruiken om een AJAX-eindpunt toe te voegen. Gebruik het WebHttpBinding service-eindpunt en configureer dat eindpunt met het WebHttpBehavior volgende codefragment, zoals weergegeven in het volgende codefragment.
<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="AjaxBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="Microsoft.Ajax.Samples.CityService">
<endpoint
address="ajaxEndpoint"
behaviorConfiguration="AjaxBehavior"
binding="webHttpBinding"
contract="Microsoft.Ajax.Samples.ICityService" />
</service>
</services>
</system.serviceModel>
</configuration>
Zie de AJAX-service met JSON en XML voor een werkend voorbeeld.
Een AJAX-compatibel servicecontract maken
Standaard retourneren servicecontracten die worden weergegeven via een AJAX-eindpunt gegevens in de XML-indeling. Standaard zijn servicebewerkingen toegankelijk via HTTP POST-aanvragen voor URL's die het eindpuntadres bevatten, gevolgd door de naam van de bewerking, zoals wordt weergegeven in het volgende voorbeeld.
[OperationContract]
string[] GetCities(string firstLetters);
Deze bewerking is toegankelijk met behulp van een HTTP POST naar http://serviceaddress/endpointaddress/GetCities
en retourneert een XML-bericht.
U kunt het volledige webprogrammeermodel gebruiken om deze basisaspecten aan te passen. U kunt bijvoorbeeld de WebGetAttribute of WebInvokeAttribute kenmerken gebruiken om het HTTP-werkwoord te bepalen waarop de bewerking reageert of de UriTemplate
eigenschap van deze respectieve kenmerken gebruiken om aangepaste URI's op te geven. Zie het onderwerp WCF-web-HTTP-programmeermodel voor meer informatie.
De JSON-gegevensindeling wordt vaak gebruikt in AJAX-services. Als u een bewerking wilt maken die JSON retourneert in plaats van XML, stelt u de ResponseFormat eigenschap (of de ResponseFormat) in op Json. In het onderwerp Zelfstandige JSON-serialisatie ziet u hoe ingebouwde .NET-typen en gegevenscontracttypen worden toegewezen aan JSON.
Normaal gesproken bestaan JSON-aanvragen en -antwoorden uit slechts één item. Voor de voorgaande GetCities
bewerking lijkt de aanvraag op de volgende instructie.
"na"
Het antwoord op die aanvraag lijkt op de volgende instructie.
["Nairobi", "Naples", "Nashville"]
Als de bewerking een extra parameter gebruikt, moet de aanvraagstijl worden verpakt om beide parameters in één JSON-object te verpakken. Een voorbeeld van dit JSON-bericht in deze stijl is in het volgende voorbeeld.
{"firstLetters": "na", "maxNumber": 2}
Het volgende contract accepteert dit bericht.
[WebInvoke(BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat=WebMessageFormat.Json)]
[OperationContract]
string[] GetCities(string firstLetters, int maxNumber);
Toegang tot AJAX-services
WCF AJAX-eindpunten accepteren altijd zowel JSON- als XML-aanvragen.
HTTP POST-aanvragen met een inhoudstype 'application/json' worden behandeld als JSON en aanvragen met inhoudstype dat aangeeft dat XML (bijvoorbeeld 'text/xml') als XML wordt behandeld.
HTTP GET-aanvragen bevatten alle aanvraagparameters in de URL zelf.
Het is aan de gebruiker om te bepalen hoe de HTTP-aanvraag naar het eindpunt moet worden gemaakt. De gebruiker heeft ook volledige controle over het maken van de JSON die de hoofdtekst van de aanvraag vormt. Zie de AJAX-service met JSON en XML voor een voorbeeld van het maken van een aanvraag vanuit JavaScript.