Delen via


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.