lunes, 9 de marzo de 2009

Enviar datos de un Formulario cliente a Internet

Hace algunos días me encontraba haciendo unas aplicaciones de escritorio en Visual Studio 2005, al principio no tenia mayor complicaciones que hacer un formulario sencillo, después por cuestiones laborales tenia que enviar esta información a un servidor ASP.NET A continuación dejo una de las distintas posibilidades y el por que.

Lo primero sera saber que podemos enviar información desde una aplicación cliente a una pagina .aspx atravez de: Internet Transfer Controls, o WinSock, o Web Browser, o crear una instancia del IE.

Aquí pondré una aplicación que conectara con un ActiveX Web Browser, una de las razones por las que use este control fue:

1. Se enviara por el protocolo HTTP un protocolo seguro y que ademas permitirá enviar no solo a paginas .aspx si no tambien a .php y .jsp.

2. Es perfecto para envió Asincronico.

A continuación dejare un ejemplo para que puedan asimilarlo mas en practica.

Crear una página .aspx
1. Cree un nuevo proyecto de aplicación Web de Microsoft ASP.NET (.aspx). De forma predeterminada, se crea la página WebForm1.aspx.

2. En el código WebForm1.aspx detrás de la página que contiene etiquetas HTML, reemplace el código existente con el siguiente codigo.

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication4.WebForm1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>
<HEAD>
ITLE>NAVPOST PAGE</TITLE>
</HEAD>
<% Dim xSabor as string = Request("Sabor")
Dim xNombre as String = Request("Nombre")
Response.Write( "Hola " & xNombre & ",<br>" & " A elegido " & xSabor & " intente de nuevo ") %>
</HTML>

3. Guardar WebForm1.aspx. En el menú Generar , haga clic en Generar solución.

Crear el proyecto de ejemplo de Visual Basic .NET
1. Utilizar Visual Basic .NET para crear un nuevo proyecto de aplicación para Windows. De forma predeterminada, se crea un formulario Windows Forms que se denomina Form1.

2. agregar un control TextBox, un control ComboBox y un boton, alos cuales daremos nombres correspondientemente: Tnombre, Copcion, Enviar.

3. En el menú Ver , haga clic en cuadro de herramientas

4. Haga clic con el botón secundario en el cuadro de herramientas y, a continuación, haga clic en Agregar o quitar elementos . Aparecerá el cuadro de diálogo Personalizar cuadro de herramientas .

5. En la ficha componentes COM en el cuadro de diálogo Personalizar cuadro de herramientas , agregar WebBrowser de Microsoft (SHDOCVW.DLL) al proyecto.

6. Agregar un control de ActiveX WebBrowser a Windows Forms. De forma predeterminada, se agrega el AxWebBrowser1 al Windows Form.

7. Para importar el espacio de nombres System.Text en el proyecto, agregar el código siguiente al principio del archivo Form1.vb.

Imports System.Text

8. Agregue el código siguiente en el archivo Form1.vb.

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Copcion.Items.Add("Vainilla")
Copcion.Items.Add("Chocolate")
Copcion.Items.Add("Fresa")
Copcion.SelectedIndex = 0

End Sub

Private Sub Enviar_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Enviar.Click
Dim vPost As Object
Dim vHeaders As Object
Dim Sabor As String
Dim cSabor As String
Dim cNombre As String
Dim cPostData As String
Dim separador As String

Sabor = Copcion.SelectedItem
cSabor = "Sabor="
Separador = "&"
cNombre = "Nombre="
cPostData = cNombre & Tnombre.Text & Separador & cSabor & Sabor
vHeaders = "Content-Type: application/x-www-form-urlencoded" + Chr(10) + Chr(13)
vPost = ASCIIEncoding.ASCII.GetBytes(cPostData)
AxWebBrowser1.Navigate2("http://nombredelservidor.WebForm1.aspx", Nothing, Nothing, vPost, vHeaders)

End Sub

la clase ASCIIEncoding proporciona un método para convertir una cadena en una matriz de bytes.

9. Modifique la dirección URL de la llamada al método Navigate2 . Utilizar una dirección URL que es correcta para el proyecto.

10. Ejecute la aplicación llene los campos y envié. Observe que los datos del formulario Windows Forms se contabiliza en el servidor HTTP. Además, la respuesta aparece en el explorador.

No hay comentarios.: