Compartir a través de


Usar servicios web en ASP.NET para AJAX

Actualización: noviembre 2007

En este tema se describe cómo tener acceso a los servicio web desde script de cliente en páginas web ASP.NET habilitadas para AJAX. Los servicios pueden ser servicios personalizados que se crean o servicios de aplicación integrados. Los servicios de aplicación se proporcionan como parte de AJAX de ASP.NET e incluyen autenticación, funciones y servicios de perfil.

Los servicios web personalizados pueden encontrarse en forma de servicios web de ASP.NET (servicios .asmx) o servicios de Windows Communication Foundation (WCF) (servicios .svc).

Este tema contiene la siguiente información:

  • Escenarios

  • Información general

  • Ejemplos

  • Recursos adicionales

  • Referencia de clase

  • Lo nuevo

Escenarios

WCF y ASP.NET se usan en los casos siguientes:

  • Si ya ha creado servicios WCF, puede agregar puntos finales para habilitar el script en páginas web habilitadas para AJAX y tener así acceso a los servicios. Para obtener más información, consulte Exponer servicios de WCF a script de cliente.

  • Si ya ha creado servicios web ASP.NET (.asmx), puede modificarlos para habilitar el script en páginas web habilitadas para AJAX y tener así acceso al mismo servicio. Para obtener más información, consulte Exponer servicios web a script de cliente.

  • Si desea crear un servicio web personalizado al que se tendrá acceso desde páginas web ASP.NET con AJAX, puede implementarlo como un servicio WCF o como un servicio web ASP.NET (archivo .asmx).

  • Puede usar los servicios de aplicación ASP.NET integrados para tener acceso a la autenticación, las funciones y la información de perfil de los usuarios desde el script de cliente que se ejecuta en una página web habilitada para AJAX. Para obtener más información, consulte Utilizar la autenticación de formularios con AJAX en ASP.NET.

Información general

ASP.NET permite crear servicios web a los que se puede tener acceso desde script de cliente en páginas web. Las páginas se comunican con el servidor a través de una capa de comunicación de servicio web que usa la tecnología AJAX para realizar llamadas al servicio web. Los datos se intercambian de forma asincrónica entre cliente y servidor, normalmente en formato JSON.

Comunicación cliente-servidor para los clientes de AJAX

En las páginas web habilitadas para AJAX, el explorador realiza una solicitud inicial al servidor para la página y, a continuación, realiza solicitudes asincrónicas subsiguientes a los servicios web para los datos. Los elementos de comunicación del cliente se presentan en forma de clases de proxy descargadas desde el servidor y la biblioteca de scripts de cliente básica. Los elementos de comunicación del servidor son controladores y servicios personalizados. La ilustración siguiente muestra los elementos involucrados en la comunicación entre el cliente y el servidor.

Comunicación cliente servidor

Arquitectura de cliente de AJAX

Los exploradores llaman a los métodos de servicio web mediante clases de proxy. Una clase de proxy es un script que el servidor genera automáticamente y que se descarga al explorador en el tiempo de carga de la página. La clase de proxy proporciona un objeto de cliente que representa los métodos expuestos de un servicio web.

Para llamar a un método de servicio web, el script de cliente llama a los métodos correspondientes de la clase de proxy. Las llamadas se realizan de forma asincrónica, a través del objeto XMLHTTP.

La capa de comunicación del servicio web contiene los tipos de script de biblioteca que permiten a las clases de proxy realizar las llamadas de servicio. Para obtener más información, vea las clases que se incluyen en el espacio de nombres Sys.Net.

El código de las clases de proxy y de la capa de comunicación básica del servicio web oculta la complejidad de XMLHTTP y las diferencias entre los exploradores. Esto simplifica el script de cliente necesario para llamar al servicio web.

Hay dos enfoques a la hora de realizar una solicitud de servicio web:

  • Llamar a los servicio web mediante el verbo POST de HTTP. Una solicitud POST tiene un cuerpo que contiene los datos que el explorador envía al servidor. No tiene limitación de tamaño. Por tanto, puede usar una solicitud POST cuando el tamaño de los datos supera la limitación de tamaño intrínseca de una solicitud GET. El cliente serializa la solicitud en formato JSON y la envía como datos POST al servidor. El servidor deserializa los datos JSON en tipos de .NET Framework y realiza la llamada real al servicio web. Durante la respuesta, el servidor serializa los valores devueltos y los pasa al cliente, que los deserializa en los objetos JavaScript para su procesamiento.

  • Llamar a los servicio web mediante el verbo GET de HTTP. Este enfoque se parece la funcionalidad de una solicitud POST, con las diferencias siguientes:

    • El cliente usa una cadena de consulta para enviar los parámetros al servidor.

    • Una solicitud GET sólo puede llamar a un método de servicio web que se configura mediante el atributo ScriptMethodAttribute.

    • El tamaño de los datos se limita a la longitud de la dirección URL que permite el explorador.

      Nota:

      Las solicitudes GET se deben evitar en llamadas al método que modifican los datos del servidor o que exponen información crítica. En las solicitudes GET, el explorador codifica el mensaje en la dirección URL y, por consiguiente, su manipulación resulta más fácil. Tanto en las solicitudes GET como POST, debe seguir instrucciones de seguridad para proteger datos confidenciales.

La ilustración siguiente muestra la arquitectura de cliente AJAX en ASP.NET.

Arquitectura de cliente de AJAX

En los elementos de la arquitectura de cliente se incluyen la capa de comunicación del servicio web de la biblioteca básica y las clases de proxy descargadas para los servicios que se usan en la página. Los elementos individuales que se muestran en la figura son los siguientes:

  • Clases de proxy de servicio personalizadas. Están compuestas de script de cliente que el servidor genera automáticamente y que se descargan al explorador. Las clases de proxy proporcionan un objeto para cada servicio WCF o ASMX que se usa en la página. (Es decir, proporcionan un objeto para cada elemento del elemento ServiceReferences del control ScriptManager incluido en la página.) Cuando se llama a un método de proxy en script de cliente, se crea una solicitud asincrónica al método de servicio web correspondiente en el servidor.

  • Clase de proxy de autenticación. El servicio de aplicación de autenticación del servidor genera la clase de proxy AuthenticationService. Esta clase permite al usuario iniciar o cerrar la sesión mediante JavaScript en el explorador sin realizar un viaje de ida y vuelta al servidor.

  • Clase de proxy de función. El servicio de aplicación de funciones del servidor genera la clase de proxy RoleService. Esta clase permite agrupar a los usuarios y tratar cada grupo como una unidad mediante JavaScript sin realizar viajes de ida y vuelta al servidor. Esto puede resultar útil para permitir o denegar el acceso a los recursos del servidor.

  • Clase de proxy de perfil. El servicio de aplicación de perfil del servidor genera la clase ProfileService. Esta clase hace que la información de perfil del usuario actual esté disponible en el cliente mediante JavaScript sin realizar viajes de ida y vuelta al servidor.

  • Clase de proxy de métodos de página. Esta clase proporciona la infraestructura de scripting para que el script de cliente llame a los métodos estáticos en una página ASP.NET como si fuesen métodos de servicio web. Para obtener más información, consulte Llamar a servicios web desde script de cliente.

  • Capa de comunicación del servicio web. Ésta es la biblioteca que contiene los tipos de script de cliente. Estos tipos permiten al explorador (cliente) comunicar con los servicios en el servidor. También evitan en las aplicaciones cliente las complejidades de establecer y mantener la comunicación asincrónica entre cliente y servidor. Encapsulan el objeto XMLHTTP del explorador que proporciona la función asincrónica y permiten a las aplicaciones cliente ser independientes del explorador. A continuación se muestra los elementos principales de la capa de comunicación del servicio web:

    • WebRequest. Proporciona la funcionalidad de script de cliente para realizar una solicitud web. Para obtener más información, vea la clase WebRequest.

    • WebRequestManager. Administra el flujo de solicitudes web emitidas por el objeto WebRequest al objeto de ejecución asociado. Para obtener más información, vea la clase WebRequestManager.

    • XmlHttpExecutor. Realiza solicitudes de red asincrónicas mediante la compatibilidad XMLHTTP del explorador. Para obtener más información, vea la clase XmlHttpExecutor.

    • Serialización JSON. Serializa los objetos JavaScript en formato JSON. La deserialización está disponible mediante la función eval de JavaScript. Para obtener más información, vea la clase JavaScriptSerializer.

El formato de serialización predeterminado es JSON, pero los métodos individuales en los servicios web y en las páginas web ASP.NET pueden devolver formatos alternativos como XML. El formato de serialización de un método se puede especificar con atributos. Por ejemplo, para un servicio ASMX, puede establecer el atributo ScriptMethodAttribute de forma que un método de servicio web devuelva datos XML, como se muestra en el ejemplo siguiente:

[ScriptMethod(ResponseFormat.Xml)] 

<ScriptMethod(ResponseFormat.Xml)> 

Arquitectura de servidor de AJAX

La ilustración siguiente muestra la arquitectura de servidor de AJAX, que incluye los elementos que permiten la comunicación con aplicaciones cliente.

Arquitectura de servidor de AJAX

Los elementos de la arquitectura de servidor incluyen la capa de comunicación del servicio web con un controlador HTTP y clases de serialización, servicios personalizados, métodos de página y servicios de aplicación. Los elementos individuales que se muestran en la figura son los siguientes:

  • Servicios web personalizados. Proporcionan la funcionalidad de servicio que se implementa y devuelven la respuesta adecuada al cliente. Los servicios web personalizados pueden ser servicios ASP.NET o WCF. La capa de comunicación del servicio web genera automáticamente clases de proxy de script de cliente a las que se pueden llamar de forma asincrónica desde el script de cliente.

  • Métodos de página. Este componente habilita un método en una página ASP.NET al que se llamará como si se tratase de un método de servicio web. Los métodos de página se deben definir en la página que realiza la llamada al método de página.

  • Servicio de autenticación. El servicio de autenticación genera una clase de proxy de autenticación que permite al usuario iniciar o cerrar la sesión mediante JavaScript de cliente. Este servicio de aplicación está siempre disponible y no es necesario crear instancias de él. Para obtener más información, vea Utilizar la autenticación de formularios con AJAX en ASP.NET.

  • Servicio de función. El servicio de función genera una clase de proxy de función que permite al JavaScript de cliente tener acceso a información sobre las funciones del usuario autenticado actualmente. Este servicio de aplicación está siempre disponible y no es necesario crear instancias de él. Para obtener más información, consulte Usar información de funciones con AJAX en ASP.NET.

  • Servicio de perfil. El servicio de perfil genera una clase de proxy de perfil que permite al JavaScript de cliente obtener y establecer propiedades de perfil para el usuario asociado a la solicitud actual. Este servicio de aplicación está siempre disponible y no es necesario crear instancias de él. Para obtener más información, vea Usar información de perfiles con AJAX en ASP.NET.

  • Serialización JSON. El componente de serialización JSON del servidor habilita la serialización y deserialización personalizables de tipos .NET Framework comunes al y desde el formato JSON. Para obtener más información, consulte JavaScriptSerializer.

  • Serialización XML. La capa de comunicación del servicio web admite la serialización XML para solicitudes SOAP a servicios web y para devolver tipos XML de una solicitud JSON a un servicio web.

Ejemplos

Los ejemplos siguientes muestran cómo llamar a servicios ASP.NET y WCF desde script de cliente. En otras secciones de la documentación se proporcionan ejemplos sobre la forma de llamar a los servicios de aplicación desde script de cliente. Los vínculos relacionados se proporcionan más adelante en este tema.

Llamar al método de servicio web en AJAX

.NET Framework permite llamar de forma asincrónica a los métodos de servicios web ASP.NET (.asmx) desde el explorador con script de cliente. La página puede llamar a los métodos basados en servidor sin una devolución de datos y sin actualizar la página entera, ya que sólo se transfieren datos entre el explorador y el servidor.

En el ejemplo siguiente se muestra cómo exponer un método de servicio web en una página web ASP.NET.

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

    <head id="Head1" >
        <style type="text/css">
            body {  font: 11pt Trebuchet MS;
                    font-color: #000000;
                    padding-top: 72px;
                    text-align: center }

            .text { font: 8pt Trebuchet MS }
        </style>

        <title>Simple Web Service</title>

            <script type="text/javascript">

            // This function calls the Web Service method.  
            function GetServerTime()
            {
                Samples.AspNet.ServerTime.GetServerTime(OnSucceeded);
            }

            // This is the callback function that
            // processes the Web Service return value.
            function OnSucceeded(result)
            {
                var RsltElem = document.getElementById("Results");
                RsltElem.innerHTML = result;
            }

        </script>

    </head>

    <body>
        <form id="Form1" >
         <asp:ScriptManager  ID="scriptManager">
                <Services>
                    <asp:ServiceReference path="ServerTime.asmx" />
                </Services>
            </asp:ScriptManager>
            <div>
                <h2>Server Time</h2>
                    <p>Calling a service that returns the current server time.</p>

                    <input id="EchoButton" type="button" 
                        value="GetTime" onclick="GetServerTime()" />
            </div>
        </form>

        <hr/>

        <div>
            <span id="Results"></span>
        </div>   

    </body>

</html>
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

    <head id="Head1" >
        <style type="text/css">
            body {  font: 11pt Trebuchet MS;
                    font-color: #000000;
                    padding-top: 72px;
                    text-align: center }

            .text { font: 8pt Trebuchet MS }
        </style>

        <title>Simple Web Service</title>

            <script type="text/javascript">

            // This function calls the Web Service method.  
            function GetServerTime()
            {
                Samples.AspNet.ServerTime.GetServerTime(OnSucceeded);
            }

            // This is the callback function that
            // processes the Web Service return value.
            function OnSucceeded(result)
            {
                var RsltElem = document.getElementById("Results");
                RsltElem.innerHTML = result;
            }

        </script>

    </head>

    <body>
        <form id="Form1" >
         <asp:ScriptManager  ID="scriptManager">
                <Services>
                    <asp:ServiceReference path="ServerTime.asmx" />
                </Services>
            </asp:ScriptManager>
            <div>
                <h2>Server Time</h2>
                    <p>Calling a service that returns the current server time.</p>

                    <input id="EchoButton" type="button" 
                        value="GetTime" onclick="GetServerTime()" />
            </div>
        </form>

        <hr/>

        <div>
            <span id="Results"></span>
        </div>   

    </body>

</html>

En el ejemplo siguiente se muestra una página web y el servicio web relacionado que llama el script de página.

<%@ WebService Language="VB" Class="Samples.AspNet.ServerTime" %>

Imports System.Web
Imports System.Web.Services
Imports System.Xml
Imports System.Web.Services.Protocols
Imports System.Web.Script.Services

Namespace Samples.AspNet

    <WebService(Namespace:="http://tempuri.org/")> _
    <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
    <ScriptService()> _
    Public Class ServerTime
        Inherits System.Web.Services.WebService

        <WebMethod()> _
        Public Function GetServerTime() As String
            Return String.Format("The current time is {0}.", _
                DateTime.Now)

        End Function
    End Class

End Namespace

<%@ WebService Language="C#" Class="Samples.AspNet.ServerTime" %>

using System;
using System.Web;
using System.Web.Services;
using System.Xml;
using System.Web.Services.Protocols;
using System.Web.Script.Services;

namespace Samples.AspNet
{

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ScriptService]
    public class ServerTime : System.Web.Services.WebService
    {

        [WebMethod]
        public string GetServerTime()
        {
            return String.Format("The server time is {0}.", 
                DateTime.Now);

        }

    }

}

Realizar solicitudes HTTP desde un cliente de AJAX

En el ejemplo anterior se muestra cómo llamar a los servicios web desde script de cliente mediante una llamada a las clases de proxy del servicio web generadas automáticamente. También puede realizar llamadas de nivel inferior a los servicios web desde script de cliente. Puede efectuar estas llamadas si debe administrar la capa de comunicación o examinar los datos que se envían a o desde el servidor. Para llamar a los servicios web de este modo, usa la clase WebRequest.

En el ejemplo siguiente se muestra cómo usar un objeto WebRequest para implementar solicitudes GET y POST que conectan a las direcciones URL especificadas (puntos finales HTTP).

// ConnectingEndPoints.js

var resultElement;

function pageLoad()
{
    resultElement = $get("ResultId");
}

// This function performs a GET Web request.
function GetWebRequest()
{
    alert("Performing Get Web request.");

    // Instantiate a WebRequest.
    var wRequest = new Sys.Net.WebRequest();

    // Set the request URL.      
    wRequest.set_url("getTarget.htm");
    alert("Target Url: getTarget.htm");

    // Set the request verb.
    wRequest.set_httpVerb("GET");

    // Set the request callback function.
    wRequest.add_completed(OnWebRequestCompleted);

    // Clear the results area.
    resultElement.innerHTML = "";

    // Execute the request.
    wRequest.invoke();  
}

// This function performs a POST Web request.
function PostWebRequest()
{
    alert("Performing Post Web request.");

    // Instantiate a WebRequest.
    var wRequest = new Sys.Net.WebRequest();

    // Set the request URL.      
    wRequest.set_url("postTarget.aspx");
    alert("Target Url: postTarget.aspx");

    // Set the request verb.
    wRequest.set_httpVerb("POST");

    // Set the request handler.
    wRequest.add_completed(OnWebRequestCompleted);

    // Set the body for he POST.
    var requestBody = 
        "Message=Hello! Do you hear me?";
    wRequest.set_body(requestBody);
    wRequest.get_headers()["Content-Length"] = 
        requestBody.length;

    // Clear the results area.
   resultElement.innerHTML = "";

    // Execute the request.
    wRequest.invoke();              
}


// This callback function processes the 
// request return values. It is called asynchronously 
// by the current executor.
function OnWebRequestCompleted(executor, eventArgs) 
{    
    if(executor.get_responseAvailable()) 
    {
        // Clear the previous results. 

       resultElement.innerHTML = "";

        // Display Web request status. 
       resultElement.innerHTML +=
          "Status: [" + executor.get_statusCode() + " " + 
                    executor.get_statusText() + "]" + "<br/>";

        // Display Web request headers.
       resultElement.innerHTML += 
            "Headers: ";

       resultElement.innerHTML += 
            executor.getAllResponseHeaders() + "<br/>";

        // Display Web request body.
       resultElement.innerHTML += 
            "Body:";

      if(document.all)
        resultElement.innerText += 
           executor.get_responseData();
      else
        resultElement.textContent += 
           executor.get_responseData();
    }

}
if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

Llamar a operaciones del servicio WCF en AJAX

Puede llamar de forma asincrónica a los servicios de Windows Communication Foundation (WCF) (.svc) desde el script de cliente básicamente de la misma forma que llama a los servicios basados en .asmx. En el ejemplo siguiente se muestra cómo exponer y llamar a operaciones del servicio WCF en una página web ASP.NET.

<%@ Page Language="VB" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <style type="text/css">
        body {  font: 11pt Trebuchet MS;
                font-color: #000000;
                padding-top: 72px;
                text-align: center }

        .text { font: 8pt Trebuchet MS }
    </style>
    <title>Simple WCF Service Page</title>

</head>
<body>
    <form id="form1" >
        <asp:ScriptManager ID="ScriptManager1" >
            <Services>
                <asp:ServiceReference 
                    Path="SimpleService.svc/ws"/>
            </Services>
            <Scripts>
                <asp:ScriptReference Path="service.js" />
            </Scripts>
        </asp:ScriptManager>
        
        <div>
            <h2>Simple WCF Service</h2>
            <input type='button' name="clickme"  value="Greetings" 
                onclick="javascript:OnClick()" /> &nbsp; &nbsp;
            <input type='button' name="clickme2"  value="Greetings2" 
                onclick="javascript:OnClick2()" />
            <hr/>
            <div>
                <span id="Results"></span>
            </div> 
        </div>

    </form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="true"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <style type="text/css">
        body {  font: 11pt Trebuchet MS;
                font-color: #000000;
                padding-top: 72px;
                text-align: center }

        .text { font: 8pt Trebuchet MS }
    </style>
    <title>Simple WCF Service Page</title>

</head>
<body>
    <form id="form1" >
        <asp:ScriptManager ID="ScriptManager1" >
            <Services>
                <asp:ServiceReference 
                    Path="SimpleService.svc/ws"/>
            </Services>
            <Scripts>
                <asp:ScriptReference Path="service.js" />
            </Scripts>
        </asp:ScriptManager>
        
        <div>
            <h2>Simple WCF Service</h2>
            <input type='button' name="clickme"  value="Greetings" 
                onclick="javascript:OnClick()" /> &nbsp; &nbsp;
            <input type='button' name="clickme2"  value="Greetings2" 
                onclick="javascript:OnClick2()" />
            <hr/>
            <div>
                <span id="Results"></span>
            </div> 
        </div>

    </form>
</body>
</html>
var ServiceProxy;

function pageLoad()
{
    ServiceProxy = new ISimpleService();
    ServiceProxy.set_defaultSucceededCallback(SucceededCallback);
}

function OnClick()
{
    // var myService = new ISimpleService();
    ServiceProxy.HelloWorld1("George");
}

function OnClick2()
{
    var dc = new DataContractType();
    dc.FirstName = "George";
    dc.LastName = "Washington";
    ServiceProxy.HelloWorld2(dc);      
}

// This is the callback function that
// processes the Web Service return value.
function SucceededCallback(result, userContext, methodName)
{
    var RsltElem = document.getElementById("Results");
    RsltElem.innerHTML = result + " from " + methodName + ".";
}
if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();
Imports System
Imports System.Web
Imports System.Collections
Imports System.Collections.Generic
Imports System.Threading
Imports System.Xml
Imports System.Xml.Serialization
Imports System.Text
Imports System.IO
Imports System.Runtime.Serialization
Imports System.ServiceModel
Imports System.ServiceModel.Description
Imports System.ServiceModel.Dispatcher
Imports System.ServiceModel.Channels
Imports System.ServiceModel.Activation


' This a WCF service which consists of a contract, 
' defined below as ISimpleService, and DataContractType, 
' a class which implements that interface, see SimpleService, 
' and configuration entries that specify behaviors associated with 
' that implementation (see <system.serviceModel> in web.config)
Namespace Aspnet.Samples.SimpleService

    <ServiceContract()> _
    Public Interface ISimpleService
        <OperationContract()> _
        Function HelloWorld1(ByVal value1 As String) As String
        <OperationContract()> _
        Function HelloWorld2(ByVal dataContractValue1 _
        As DataContractType) As String
    End Interface 'ISimpleService

    <ServiceBehavior(IncludeExceptionDetailInFaults:=True), _
    AspNetCompatibilityRequirements(RequirementsMode:= _
    AspNetCompatibilityRequirementsMode.Allowed)> _
    Public Class SimpleService
        Implements ISimpleService

        Public Sub New()

        End Sub 'New

        Public Function HelloWorld1(ByVal value1 As String) As String _
        Implements ISimpleService.HelloWorld1
            Return "Hello " + value1
        End Function 'HelloWorld1

        Public Function HelloWorld2(ByVal dataContractValue1 _
        As DataContractType) As String _
        Implements ISimpleService.HelloWorld2
            Return "Hello " + dataContractValue1.FirstName + " " + _
            dataContractValue1.LastName
        End Function 'HelloWorld2
    End Class 'SimpleService

    <DataContract()> _
    Public Class DataContractType
        Private _firstName As String
        Private _lastName As String


        <DataMember()> _
        Public Property FirstName() As String
            Get
                Return _firstName
            End Get
            Set(ByVal value As String)
                _firstName = value
            End Set
        End Property

        <DataMember()> _
        Public Property LastName() As String
            Get
                Return _lastName
            End Get
            Set(ByVal value As String)
                _lastName = value
            End Set
        End Property
    End Class 'DataContractType 
End Namespace

using System;
using System.Web;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Xml;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Channels;
using System.ServiceModel.Activation;

// This a WCF service which consists of a contract, 
// defined below as ISimpleService, and DataContractType, 
// a class which implements that interface, see SimpleService, 
// and configuration entries that specify behaviors associated with 
// that implementation (see <system.serviceModel> in web.config)

namespace Aspnet.Samples
{
    [ServiceContract()]
    public interface ISimpleService
    {
        [OperationContract]
        string HelloWorld1(string value1);
        [OperationContract]
        string HelloWorld2(DataContractType dataContractValue1);
    }

    [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class SimpleService : ISimpleService
    {
        public SimpleService()
        { }

        public string HelloWorld1(string value1)
        {
            return "Hello " + value1;
        }
        public string HelloWorld2(DataContractType dataContractValue1)
        {
            return "Hello " + dataContractValue1.FirstName +
                                " " + dataContractValue1.LastName;
        }
    }

    [DataContract]
    public class DataContractType
    {
        string firstName;
        string lastName;

        [DataMember]
        public string FirstName
        {
            get { return firstName; }
            set { firstName = value; }
        }
        [DataMember]
        public string LastName
        {
            get { return lastName; }
            set { lastName = value; }
        }
    }

}

Ejemplos adicionales

Volver al principio de la página

Referencia de clase

Las tablas siguientes enumeran las principales clases asociadas con servicios web a los que se puede llamar desde script de cliente.

Espacios de nombres de cliente

Name

Description

Sys.Net (Espacio de nombres)

Contiene clases que administran la comunicación entre las aplicaciones cliente AJAX de ASP.NET y los servicios web del servidor. El espacio de nombres Sys.Net forma parte de Microsoft AJAX Library.

Sys.Serialization (Espacio de nombres)

Contiene clases que se relacionan con la serialización de los datos para las aplicaciones cliente AJAX de ASP.NET.

Sys.Services (Espacio de nombres)

Contiene tipos que proporcionan acceso de script en aplicaciones cliente AJAX de ASP.NET al servicio de autenticación de ASP.NET, el servicio de perfil y otros servicios de aplicación. El espacio de nombres Sys.Services forma parte de Microsoft AJAX Library.

Espacios de nombres de servidor

Name

Description

System.Web.Script.Serialization

Contiene clases que proporcionan serialización y deserialización JSON (JavaScript Object Notation) para los tipos administrados. También proporciona características de extensibilidad para personalizar el comportamiento de la serialización.

Volver al principio de la página

Recursos adicionales

Acerca de XMLHTTP nativo

http://www.json.org

¿Qué es Windows Communication Foundation?

Infraestructura de servicios web XML

Servicios WCF y ASP.NET

Entender la arquitectura orientada a servicios

Lo nuevo

A continuación, se muestra las nuevas características de ASP.NET versión 3.0:

  • Servicios de aplicación en Windows Communication Foundation (WCF).

  • Servicios de la Aplicación en AJAX llamados desde una aplicación cliente de .NET Framework.

Volver al principio de la página

Vea también

Tareas

Tutorial: Crear y usar servicios web habilitados para AJAX

Conceptos

Utilizar la autenticación de formularios con AJAX en ASP.NET

Información general sobre los servicios de aplicación ASP.NET