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 voor instructies over het gebruik van WCF met ASP.NET AJAX WCF-services maken voor 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, zoals te zien is 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-Compatible-servicecontract maken

Standaard retourneren servicecontracten die worden weergegeven via een AJAX eindpunt de gegevens in 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 onderwerpStand-Alone 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 verklaring.

"na"

Het antwoord op die aanvraag lijkt op de volgende verklaring.

["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.