viernes, 4 de marzo de 2011

ASP.NET - PageMethods vs. WebMethods

check_if_email_exists Vamos a hacer un post para dejar muy claro (eso espero) las diferencias que existen entre declarar un WebMethod dentro de una página ASP.NET y declarar un WebMethod dentro de un .NET web service.

Primero mostremos la similitud de declarar el WebMethod,

1.- en una páginas aspx:
[System.Web.Services.WebMethod]
public static string HelloWorld()
{
return "Hello World";
}

2.- en un .NET web service:
[System.Web.Services.WebMethod]
public string HelloWorld()
{
return "Hello World";
}

La diferencia? el WebMethod de la página ASP.NET está declarado como static, nada más. 
Ahora, cuándo debería declarar un WebMethod dentro de una página aspx y cuándo lo debería declarar dentro del web service?

* Dentro de una página ASP.NET:
Cuando el método sólo le interesa a la página y además no quiero exponer el método.

Aunque el enunciado de que el método sólo puede ser accedido por la página donde fue declarada ya no es tan cierto, dado que puede ser accedido desde el javascript de otras páginas html, aspx, etc. Aquí hay un enlace que explica cómo hacer eso mediante JQuery:

http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

* Como parte de un .NET web service:
Cuando se desea compartir el método a todo el mundo.

 Les adjunto un pequeño ejemplo de WebMethod usándose en una página aspx:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Page Methods</title>
<style type="text/css">
*
{
font-family: Trebuchet MS;
}
.header
{
width: 220px;
margin: auto auto;
text-align: center;
background-color: orange;
background-color: black;
color: white;
}
.content
{
width: 200px;
margin: auto auto;
text-align: center;
background-color: orange;
padding: 10px;
}
</style>
<script type="text/javascript">
function checkEmail() {
var TextBox1 = $get('<%=TextBox1.ClientID %>');

PageMethods.CheckEmail(TextBox1.value, onSucceed, onError);
}

function onSucceed(result) {
alert(result);
}
function onError(result) {
alert(result.get_message());
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" runat="server">
</asp:ScriptManager>
<div class="header">Verificar si email existe</div>
<div class="content">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<a href="javascript:;" onclick="checkEmail()">Verificar ahora!!</a>
</div>
</form>
</body>
</html>

El code-beside:

[System.Web.Services.WebMethod]
public static string CheckEmail(string email)
{
if (email=="sserrano@jabs.com.pe")
return "Ya existe un usuario con ese email.";
else
return "el email está disponible.";
}

Este método es accedido desde javascript y permite verificar si un email ingresado en el textbox ya existe en nuestra base de datos. Por simplicidad Yo lo comparo con un string nomás. La cosa buena es que no hay ningún refrescado de página.

Espero que les sea de utilidad;

No hay comentarios.: