martes, 7 de octubre de 2008

Invocar webservice con HTTP GET/POST

La manera habitual de consumir un webservice .NET es mediante el protocolo SOAP. Pero hay casos en los que implementar las llamadas en dicho protocolo puede resultar bastante costoso, como por ejemplo si queremos hacer la llamada directamente desde el cliente o desde una página ASP clásica (no .NET).

La solución es invocar el webservice usando HTTP GET y POST. En el framework 1.0 esta posibilidad estaba activa por defecto, pero a partir del 1.1 está deshabilitada por cuestiones de seguridad. Así que lo primero que hay que hacer es habilitar explícitamente esta posibilidad. En el webconfig del sitio donde resida el webservice hay que añadir lo siguiente dentro del nodo <system.web>:

<webServices>
    <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
    </protocols>
</webServices>

Una vez realizado esto ya podemos comprobar que ya podemos invocar a nuestro webservice desde un navegador en cualquier cliente, tecleando la siguiente url:
http://servidor/nombreWebService.asmx/nombreMetodo?parametro1=valor1¶metro2=valor2(...)

Lo que nos aparecerá en el navegador es el chorro XML que nos devuelve el webservice.

Pues ya somos capaces de invocar a nuestro webservice usando HTTP GET y HTTP POST, pero eso lo explica mucho mejor que yo Juan Peláez en su blog.

(Gracias a Juan Carlos por el enlace)

lunes, 6 de octubre de 2008

ASP.NET. Añadir meta "refresh" desde código

Una manera de redireccionar a otra página pasados n segundos, y poder establecer la url de manera dinámica:

En el page_load de la página inicial ponemos:

Dim urlTmp as string="nuevaPagina.aspx?id=" & _
Request.QueryString("id")

Dim mt As New HtmlMeta
mt.Attributes.Add("http-equiv", "refresh")
mt.Attributes.Add("content", "5;url=" & urlTmp)

Me.Header.Controls.Add(mt)

De esta manera, a los 5 segundos seremos redireccionados directamente a nuevaPagina.aspx, pasándole como id el mismo que tuviésemos en la página inicial.

Si nuestra página tiene masterpage, hay que usar
Me.Master.Page.Header.Controls.Add(mt)

Hale!