Compartir a través de


Cómo crear un servicio WFC con AJAX habilitado y un cliente ASP.NET que tiene acceso al servicio

En este tema, se muestra cómo usar Visual Studio para crear un servicio de Windows Communication Foundation (WCF) habilitado para AJAX y un cliente de ASP.NET que accede al servicio.

Creación de una aplicación web de ASP.NET

  1. Abra Visual Studio.

  2. En el menú Archivo, seleccione Nuevo>Proyecto.

  3. En el cuadro de diálogo Nuevo proyecto, expanda la categoría Instalado>Visual C#>Web y, a continuación, seleccione Aplicación web de ASP.NET (.NET Framework).

  4. Asigne al proyecto el nombre SandwichServices y haga clic en Aceptar.

  5. En el cuadro de diálogo Nueva aplicación web de ASP.NET, seleccione Vacía y, a continuación, seleccione Aceptar.

    ASP.NET web app type dialog in Visual Studio

Adición de un formulario web

  1. Haga clic con el botón derecho en el proyecto SandwichServices en el Explorador de soluciones y seleccione Agregar>Nuevo elemento.

  2. En el cuadro de diálogo Agregar nuevo elemento, expanda la categoría Instalado>Visual C#>Web y, a continuación, seleccione la plantilla Formulario web.

  3. Acepte el nombre predeterminado (WebForm1) y seleccione Agregar.

    WebForm1.aspx se abre en la vista Origen.

  4. Agregue el marcado siguiente dentro de las etiquetas <body>:

    <input type="button" value="Price of 3 sandwiches" onclick="Calculate()"/>
    <br />
    <span id="additionResult"></span>
    

Creación de un servicio WCF habilitado para AJAX

  1. Haga clic con el botón derecho en el proyecto SandwichServices en el Explorador de soluciones y seleccione Agregar>Nuevo elemento.

  2. En el cuadro de diálogo Agregar nuevo elemento, expanda la categoría Instalado>Visual C#>Web y, a continuación, seleccione la plantilla Servicio WCF (habilitado para AJAX).

    WCF Service (AJAX-enabled) item template in Visual Studio

  3. Asigne al servicio el nombre CostService y, a continuación, seleccione Agregar.

    CostService.svc.cs se abre en el editor.

  4. Implemente la operación en el servicio. Agregue el siguiente método a la clase CostService para calcular el costo de una cantidad de sándwiches:

    [OperationContract]
    public double CostOfSandwiches(int quantity)
    {
        return 1.25 * quantity;
    }
    

Configuración del cliente para acceder al servicio

  1. Abra el archivo WebForm1.aspx y seleccione la vista Diseño.

  2. En el menú Ver, seleccione Cuadro de herramientas.

  3. Expanda el nodo Extensiones de AJAX y arrastre y coloque un elemento ScriptManager en el formulario.

  4. De nuevo en la vista Origen, agregue el código siguiente entre las etiquetas <ScriptManager> para especificar la ruta de acceso al servicio WCF:

    <Services>
       <asp:ServiceReference Path="~/CostService.svc" />
    </Services>
    
  5. Agregue el código para la función Calculate() de JavaScript. Coloque el código siguiente en la sección head del formulario web:

    <script type="text/javascript">
    
        function Calculate() {
            CostService.CostOfSandwiches(3, onSuccess);
        }
    
        function onSuccess(result) {
            var myres = $get("additionResult");
            myres.innerHTML = result;
        }
    
    </script>
    

    Este código llama al método de CostService para calcular el precio de tres sándwiches y, a continuación, muestra el resultado en el intervalo llamado additionResult.

Ejecución del programa

Asegúrese de que WebForm1.aspx tenga el foco y, a continuación, pulse el botón Iniciar para iniciar el cliente web. El botón tiene un triángulo verde e indica algo como IIS Express (Microsoft Edge). También puede presionar F5. Haga clic en el botón Precio de 3 sándwiches para generar el resultado esperado de "3,75".

Ejemplo

A continuación, se muestra el código completo del archivo CostService.svc.cs:

using System.ServiceModel;
using System.ServiceModel.Activation;

namespace SandwichServices
{
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class CostService
    {
        [OperationContract]
        public double CostOfSandwiches(int quantity)
        {
            return 1.25 * quantity;
        }
    }
}

A continuación, se muestra el contenido completo de la página WebForm1.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="SandwichServices.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">

        function Calculate() {
            CostService.CostOfSandwiches(3, onSuccess);
        }

        function onSuccess(result) {
            var myres = $get("additionResult");
            myres.innerHTML = result;
        }

    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
        </div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="~/CostService.svc" />
            </Services>
        </asp:ScriptManager>

        <input type="button" value="Price of 3 sandwiches" onclick="Calculate()" />
        <br />
        <span id="additionResult"></span>
    </form>
</body>
</html>