Archive for the Programación Category

Accediendo al código fuente de las aplicaciones “no nativas” de iTunes

Posted in Programación with tags , , , , on 7 mayo, 2011 by febrer

Os voy a enseñar un sencillo pero eficaz método para acceder al código fuente de las aplicaciones “no nativas” del AppStore, y similares.

En tres sencillos pasos:

1.- Nos instalamos iTunes desde la sección de descargas de Apple en nuestro caso. http://www.apple.com/itunes/download/

2.- Buscamos la aplicación que nos interese y nos la descargamos . (nos pedirá un usuario y password, por lo deberemos estar registrados. (Es un sencillo formulario en el que no tenemos ni que introducir datos reales, jeje).

4.- Una vez instalada nuestra aplicación accedemos a la carpeta “Aplicaciones” de nuestro iTunes y seleccionamos la aplicación descargada y pulsamos botón derecho para acceder a la opción: “Mostrar en explorador de Windows”.

5.- En la carpeta varas que tienes un fichero con extensión (ipa): Simplemente lo renombras a zip y … tachan!!! Ya tienes acceso a los ficheros y código fuente de la aplicación. Navegando por la estructura de la aplicación observaras una carpeta con el nombre ‘www’, esta carpeta nos indica que la aplicación es “no nativa” y en ella se encuentran los ficheros javascript y html que la componen.

A partir de hay, el trabajo de analizar con que esta realizada una aplicación es cosa tuya en este post hablo un poco del tema. Por supuesto desde mi ignorancia, ya que yo soy programador .NET “puro y duro”, jeje.

En otros sistemas de venta el sistema el muy parecido. Pensar que las aplicaciones “no nativas” son simples zips que deben contener la aplicación web a ejecutar en nuestro móvil. Con las aplicaciones “nativas” también puedes utilizar esta técnica, pero accedes a programas compilados que evidentemente no tienen el código fuente.

En http://phonegap.com/apps, tenéis un gran repositorio de aplicaciones de las cuales aprender como están realizadas.

Appcelerator Titanium, PhoneGap, Sencha Touch, jQuery Mobile – Aclarando la confusión

Posted in Programación with tags , , , on 6 mayo, 2011 by febrer

La primera vez que accedía a la página web de PhoneGap, vi que era la solución a todos mis problemas: Un Framework que me permite desarrollar para todas las plataformas móviles, iPhone, Android, Symbian, incluso Windows Phone7 (en un futuro no muy lejano). Esto es lo que yo necesito!!, Es una bomba. Poder crear una aplicación y que funcione en todas las plataformas…

Qué tipo de aplicaciones podemos desarrollar en un móvil? Podemos desarrollar aplicaciones “no nativas” basadas en el navegador del móvil, y aplicaciones nativas (Objetive C/JAVA) que acceden directamente al hardware del móvil.

Sencha Touch y jQuery Mobile, son frameworks javascripts, que nos permiten desarrollar aplicaciones “no nativas” para el navegador de nuestro móvil con el mismo “look and feel” de las aplicaciones nativas.

PhoneGap y Titanium, lo que nos permiten es “empaquetar” (zip) nuestra aplicación web (con las correspondientes librerías js/css/HTML), permitiéndonos su distribución en los diferentes sistemas de venta (app store, Marketplace, etc …). Las librerías js/css3 incluidas en el paquete, pueden ser jQuery Mobile, Sencha Touch, u otro framework para móvil.

Pero Appcelerator Titanium va más allá. Con Titanium, puedes programar en js/Ruby/Python/PHP, y mediante su API/SDK, generar una aplicación nativa (Objetive C para iPhone/iPad, JAVA para Android). Con la consiguiente mejora de rendimiento al acceder directamente al hardware.

Información original obtenida de: http://beautyindesign.com/blog/titanium-phonegap-sencha-touch-jquery-mobile-clearing-up-confusion/

Mas info:

http://www.phonegap.com

http://www.appcelerator.com

http://www.sencha.com

http://jquerymobile.com/

Pruebas unitarias para interfaz de usuario (CodedUI Test).

Posted in Microsoft, Programación with tags , , on 18 octubre, 2010 by febrer

En este interesante vídeo de Channel9, podemos ver un sencillo ejemplo de como crear pruebas unitarias de interfaz de usuario.
Esta funcionalidad esta integrada en Visual Studio 2010, y es un mecanismo muy útil para mejorar nuestras pruebas unitarias.

http://channel9.msdn.com/Blogs/Charles_Sterling/How-to-create-edit-and-playback-CodedUI-Tests-in-Visual-Studio-2010-Beta2

Desde SecondNug, nos ofrecen una charla práctica de la mano de Toni Recio, Project Manager en Pasiona y MVP de Microsoft.

Información y registro:
https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032464830&EventCategory=4&culture=es-AR&CountryCode=AR

Que lo disfrutes!

Acceder a las claves “foráneas” mediante SQLClient

Posted in Programación with tags , , , on 24 abril, 2010 by febrer

Una manera de acceder a los esquemas de SQL Server utilizando OleDb es mediante la función GetOleDbSchemaTable. Utilizando el parámetro System.Data.OleDb.OleDbSchemaGuid.Foreign_Keys, el acceso a las claves “foráneas” es muy sencilla. Esta función devuelve un DataTable con la información de las “Foreign Keys” de todas las tablas con la siguiente información:

FK_TABLE_NAME
FK_COLUMN_NAME
PK_TABLE_NAME
PK_COLUMN_NAME

De esta manera, podemos saber todas las relaciones de todas las tablas de nuestra base de datos.

Pero con SqlClient, este método no existe, la manera de acceder al esquema, es mediante la tabla “Information_Schema.*”. Un forma muy sencilla de obtener la misma tabla es realizando la siguiente consulta:

SELECT ccu.table_name AS FK_TABLE_NAME,
ccu.column_name AS FK_COLUMN_NAME,
rc.constraint_name AS PK_COLUMN_NAME,
ccu2.table_name AS PK_TABLE_NAME
FROM information_schema.constraint_column_usage ccu
JOIN information_schema.referential_constraints rc ON ccu.constraint_name=rc.constraint_name
JOIN information_schema.constraint_column_usage ccu2 ON rc.unique_constraint_name=ccu2.constraint_name

Ficheros de configuración y codificación

Posted in Programación with tags , , , , , on 15 abril, 2010 by febrer

Tras unos cuantos quebraderos de cabeza, ayer solucione un problema que posiblemente os pueda pasar a más de uno.

Esta relacionado con los ficheros de configuración de nuestras aplicaciones .NET (fichero .config), Windows 2003 Server (posiblemente en xp no pase) y acentos (quizás con un fichero sin caracteres extendidos, esto no ocurra). Casualidad el que estaba utilizando sí los tenía.

El problema radica en la codificación del fichero (Unicode, ANSI, UFT-8, etc …).

El problema nos lo encontramos al editarlo con “wordpad”. Este editor, cambia la codificación del fichero, haciendo que dicho fichero no sea reconocido correctamente por nuestra aplicación y dando un error en el visor de eventos que para nada aclara el verdadero problema.

Este es el detalle del error:

Event Type: Error
Event Source: .NET Runtime 2.0 Error Reporting
Event Category: None
Event ID: 5000
Date:  4/13/2010
Time:  2:43:15 PM
User:  N/A
Computer: SERVER1
Description:
EventType clr20r3, P1 k2dtc2xq5edgbqzwwi41i4xzrenn5n2p, P2 1.0.0.0, P3 4bbf2346, P4 system.configuration, P5 2.0.0.0, P6 4889de74, P7 1a6, P8 136, P9 ioibmurhynrxkw0zxkyrvfn0boyyufow, P10 NIL.
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

Para solucionarlo, simplemente hay que editar el fichero con “notepad”, y utilizar la opción “guardar como”, indicando UNICODE o UTF-8.

Posiblemente alguno ya conozca este problemilla, pero creo que es interesante compartirlo.

El generador de perfiles (Profiler) de Internet Explorer 8

Posted in Microsoft, Programación with tags , , , , on 25 febrero, 2010 by febrer

Como algunos de vosotros sabréis, IE8, dispone de una serie de herramientas de desarrollo accesibles desde el propio explorador pulsando la tecla F12.

 Desde estas herramientas, puedes acceder al código script de la página, a la hoja de estilos (Css), y al código html (mostrado en forma de árbol). Puedes incluso, desde la pestaña “Script”, depurar la aplicación con un sencillo depurador, creando puntos de ruptura, analizar variables, etc. Personalmente, la depuración prefiero realizarla desde el entorno de desarrollo Visual Studio, pero es una opción muy interesante si desarrollas con otros lenguajes de programación que no sean de Microsoft.

 La herramienta que me ha sorprendido, por su sencillez y eficacia, es el generador de perfiles ó “profiler”. Esta utilidad, nos permite tener una visión rápida de los tiempos utilizados por cada una de nuestras funciones (js o vbs) de nuestra aplicación. De una manera fácil, podemos determinar cuales son las funciones que utilizan más tiempo en ejecutarse, y solucionar problemas de rendimiento en nuestras aplicaciones. Permite tener una vista de las funciones y sub-funciones de nuestra aplicación, organizada jerárquicamente, para que fácilmente puedas navegar por las diferentes funciones y métodos viendo los tiempos incurridos por cada una de ellas.

 Su funcionamiento es muy sencillo. Simplemente, cargamos la página que deseamos analizar, pulsamos F12, activamos el modo “captura”, pulsando en “Iniciar la creación de perfiles” (en la pestaña “Generador de perfiles”), volvemos a acceder a nuestra aplicación, y ejecutamos el código que queremos analizar. Una vez ejecutado el código a analizar, pulsamos de nuevo F12, y detenemos la captura con “Detener la creación de perfiles”. Automáticamente, podremos visualizar un informe con todos los tiempos de nuestras funciones, pudiendo ordenarlo por el campo que deseemos. Cambiando la vista a “Árbol de llamadas”, podremos acceder a las diferentes funciones y tiempos organizados por las llamadas realizadas. Toda la información, se puede exportar a csv para un posterior análisis.

 Espero que esta utilidad os permita detectar problemas de rendimiento en vuestras aplicaciones web.

 Happy scripting!!

Mejorar el rendimiento en la escritura DOM con javascript

Posted in Programación with tags , , , , , , on 15 febrero, 2010 by febrer

Uno de los principales problemas que nos encontramos al crear aplicaciones javascript, escribiendo directamente en el DOM (Document Object Model), es el mal rendimiento que este tiene cuando se realizan excesivas llamadas a AppendChild. Un claro ejemplo lo encontramos en los grids, ya que estos realizan abusivas llamadas en la creación de este (dependiendo, claro esta, del número de filas y columnas).

Una buena recomendación para acelerar este tipo de procesos, es la incorporación del elemento documentFragment en nuestros desarrollos.

Sin entrar en detalle de cómo implementar DocumentFragment en nuestros desarrollos, os muestro una tabla comparativa de ambos mecanismos con el tiempo en ms que tardan en realizar la escritura:

Browser Normal (ms) Fragment (ms)
Firefox 3.0.1 90 47
Safari 3.1.2 156 44
Opera 9.51 208 95
IE 6 401 140
IE 7 230 61
IE 8b1 120 40

Esta comparativa, junto con la manera de implementarlo en nuestros desarrollos, la encontraremos en el blog de John Resig:

http://ejohn.org/blog/dom-documentfragments

Más información sobre documentFragment:

http://therealcrisp.xs4all.nl/meuk/fragment.html

http://www.ryboe.com/2008/07/22/increasing-appendchild-performance-with-dom-tricks.html

http://www.slideshare.net/julien.lecomte/high-performance-ajax-applications

Utilizar paginación en ASP.NET con SQL Server

Posted in Programación with tags , , , , , on 3 noviembre, 2009 by febrer

Un problema que nos encontramos a la hora de realizar consultas con paginación esta en como rellenar un datatable con los registros necesarios de cada página. Es decir, no existe una manera fácil de realizar una consulta del tipo “devuélveme los registros 15 al 30 de la tabla usuarios“.

En MySQL existe un comando para utilizar en la sentencia SELECT que es LIMIT m,n gracias al cual podemos solicitar al servidor ‘n‘ registros comenzado desde el registro ‘m‘.

Para realizar este mismo proceso en SQL Server, podemos utilizar ROW_NUMBER() con un poco de ingenio. Por ejemplo, necesitamos obtener 10 registros desde el 30 al 40, en la siguiente consulta:

SELECT a.NOMBRE, a.TIPO, a.FECNAC,
a.APELLIDO1, a.COD_POSTAL, b.COD_NOMBRE
FROM usuarios AS a
INNER JOIN codpostal AS b ON a.COD_POSTAL = b.COD_POSTAL
WHERE a.FECNAC BETWEEN ? AND ? AND a.TIPO = ?
ORDER BY a.APELLIDO1

Para realizarlo, los haríamos de la siguiente forma:

SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY a.NOMBRE) AS num,
a.NOMBRE, a.TIPO, a.FECNAC,
a.APELLIDO1, a.COD_POSTAL, b.COD_NOMBRE
FROM usuarios AS a
INNER JOIN codpostal AS b ON a.COD_POSTAL = b.COD_POSTAL
WHERE a.FECNAC BETWEEN ? AND ? AND a.TIPO = ?
) AS sub
WHERE (num >= 30 AND num <= 40)

En caso de no necesitar ordenar por ningún campo en concreto, podemos utilizar:

ROW_NUMBER() OVER(ORDER BY (SELECT 1))

Espero que este pequeño truco os pueda ser de ayuda.

Mi primeras impresiones con Mono (mono-project.com)

Posted in Programación with tags , , , , , on 15 octubre, 2009 by febrer

header-logo

Llevo varios días trasteando con Linux, y más concretamente con el proyecto mono. Ha sido toda una aventura, pero puedo decir que lo están consiguiendo. En general no me he encontrado casi ningún problema en adaptar un desarrollo realizado con ASP.NET y VS2005 a Linux. La compilación perfecta a la primera, eso sí, con unos 100 warnings, pero sin importancia, pricipalmente referente a variables declaradas y no utilizadas. Me he encontrado más problemas con la base de datos. Mi intención era utilizar MySQL, que tan extendida esta entre desarrolladores LAMP (Linux, Apache, MySQL, PHP), pero curiosamente, no existe un paquete en Ubuntu para instalar los controladores correctos para utilizar MySQL con mono. Tampoco existe una versión del conector de MySQL para Linux, lo que hay que hacer para poder utilizarlo, es instalar una dll de windows en el GAC, que permite utilizar la librería MySql.Data.MySqlClient. Sin embargo, para bases de datos como SQLite o Postgre, ubuntu te permite instalar directamente los controladores correctos.

En lo que al entorno de desarrollo se refiere (Monodevelop.com), todavía están bastante lejos de conseguir un producto de la calidad de VS, pero tiempo al tiempo. He tenido bastantes problemas en la depuración de ASP.NET, nada que no se solucione apagando-encendiendo-entrando-saliendo. En definitiva, puedo decir que me ha alegrado mucho los avances del proyecto, y quizá en breve, el desarrollo de aplicaciones .NET en Linux, sea una realidad, aunque todavía los proveedores de internet, no hayan apostado por esta tecnología.

Comentar también que en el CodeCamp 2009, tienen destinada una sala exclusiva para programación y desarrollo con Mono. Seguro que muchos verán las posibilidades y darán el paso a desarrollar aplicaciones en Linux.

Problemillas con Internet Explorer 8

Posted in Programación with tags , , , , , , on 4 septiembre, 2009 by febrer

En este post, iré comentado los diferentes problemas que me estoy encontrando tras la actualización a IE8.

Problemas con la visualización de imágenes en GMAIL con HTTPS habilitado. 

Con la configuración por defecto de IE8, no se muestran las imágenes de los correos de GMAIL con HTTPS, aun habilitado la opción de mostrarlos en GMAIL. Esto es debido a que por defecto IE8 no permite mezclar contenido de diferente origen. Para habilitarlo:

 Herramientas -> Opciones de Internet -> Seguridad -> Nivel Personalizado -> Miscelánea -> Mostrar contenido mixto

Problema con la depuración de javascript y IE8

Por defecto también esta deshabilitada la opción de depurar scripts en IE8, aun marcando la opción de “Habilitar depuración de scripts”, en configuración avanzada de IE8. Para habilitar la depuración de JS, lo que tenemos que hacer es incluir una entrada en el registro y reiniciar IE8: 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main]
"TabProcGrowth"=dword:00000000

Framework Ajax: jQuery

Posted in Programación with tags , , , on 1 julio, 2009 by febrer

Según la Wikipedia:

jQuery es una biblioteca o framework de Javascript, creada inicialmente por John Resig, que permite simplificar la manera de interactuar con los documentos HTML, manipular el árbol DOM, manejar eventos, desarrollar animaciones y agregar interacción con la tecnología AJAX a páginas web.

Actualmente, jQuery es el framework Ajax más utilizado en la red. Permite de la creación de aplicaciones Ajax de una forma rápida y sencilla.

Como componente adicional, jQuery dispone de una biblioteca para la generación de interfaces de usuario, jQuery UI. Básicamente dispone de los siguientes elementos (Widgets): Accordion, Datepicker, Dialog, Progressbar, Slider, Tabs.

Estos widgets, junto con la posibilidad de utilizar efectos (Blind, Bounce, Clip, Drop, Explode, Fold, Highlight, Puff, Pulsate, Scale, Shake, Size, Slide, Transfer) e interaciones (Drag,Drop,Resize,Select,Sort) hacen de esta biblioteca una potente herramienta para el desarrollo de aplicaciones AJAX.

A continuación os dejo un ejemplo de como implementear ‘jQuery UI Tabs’ en nuestro código HTML:

<!doctype html>
<html lang="es">
<head>
 <title>jQuery UI Tabs</title>
 <link type="text/css" href="../../themes/start/ui.all.css" rel="stylesheet" />
 <script type="text/javascript" src="../../jquery-1.3.2.js"></script>   <!-- framework jQuery -->
 <script type="text/javascript" src="../../ui/ui.core.js"></script>  <!-- librería base jQuery-UI para desarrollo de interfaces -->
 <script type="text/javascript" src="../../ui/ui.tabs.js"></script>  <!-- librería para el control tabs -->
 <script type="text/javascript">
 $(function() {
  $("#tabs").tabs(); //activamos las pestañas
 });
 </script>
</head>
<body>
 
<div id="tabs">
 <ul>
  <li><a href="#tabs-1">Pestaña 1</a></li>
  <li><a href="#tabs-2">Pestaña 2</a></li>
  <li><a href="#tabs-3">Pestaña 3</a></li>
 </ul>
 <div id="tabs-1">
  <p>Contenido pestaña 1.</p>
 </div>
 <div id="tabs-2">
  <p>Contenido pestaña 2.</p>
 </div>
 <div id="tabs-3">
  <p>Contenido pestaña 3.</p>
 </div>
</div>
</body>
</html> 

 

Verdaderamente recomendable 🙂

Enlaces de interes:

240 plugins para utilizar con jQuery: http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/     
Framework base: http://jquery.com/  
Framework para la creación de interfaces de usuario:  http://jqueryui.com/

Google Charts – Generando gráficos de forma dinámica

Posted in Programación with tags , , , on 29 junio, 2009 by febrer

La librería de Google Charts, nos permite generar gráficos de una manera muy simple, sin tener que instalar nada en nuestro servidor, ni realizar complejos desarrollos.
El mayor problema que veo en este tipo de servicios, es la total dependencia de los servidores de Google, el día que no les interese dar este tipo de servicios gratuitamente, no habrá más remedio que pasar por caja.
Hay que andar con ojo, y no abusar de este tipo de servicios gratuitos.

Link a la documentación de la API: http://code.google.com/intl/es/apis/chart/

Gráfico de tarta: http://chart.apis.google.com/chart?cht=p3&chd=t:60,40,12,2,2,3,4,5,12,34,60,23&chs=500×200&chl=Ene|Feb|Mar|Abr|May|Jun|Jul|Ago|Sep|Oct|Nov|Dic

 

Ejemplo de gráfico QR: http://chart.apis.google.com/chart?cht=qr&chs=100×100&chl=FebrerSoftware

 

Ejemplo de mapa: http://chart.apis.google.com/chart?cht=t&chs=400×200&chtm=europe

Como borrar el registro de transacciones (Transaction Log) en SQL Server

Posted in Programación with tags , , , on 19 junio, 2009 by febrer

El procedimiento ‘normal’ para realizar el borrado del registro de transacciones, sería el siguiente:

BACKUP LOG [MIBASEDEDATOS] WITH TRUNCATE_ONLY
DBCC SHRINKFILE(NOMBRE_LOGICO_LOG, 1)

En el caso de que sigamos obteniendo un error del tipo:

Msg 9002, Level 17, State 4, Line 1
The transaction log for database ‘MIBASEDEDATOS’ is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

Deberemos tomar una solución más drástica, como borrar físicamente el fichero LOG en el disco. Para ello, lo primero que tenemos que hacer es ‘detachear’ o ‘Separar’ la base de datos. El procedimiento es el siguiente:

1 – Forzamos la escritura de las páginas en memoria con CHECKPOINT (repetimos varias veces este comando).
2 – Separamos la base de datos con sp_detach_db

USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N’MIBASEDEDATOS’
GO

3 – Borrado del fichero .LDF físico existente en nuestro disco duro. Normalmente, su ubicación es:

C:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\Data\MIBASEDEDATOS.LDF (ojo, no MDF, mdf es la base de datos)

4 – Una vez eliminado el fichero .LDF, procederemos a realizar de nuevo el ‘attach’ o ‘Adjuntar’ la base de datos, de esta manera:

USE [master]
GO
CREATE DATABASE [MIBASEDEDATOS] ON
( FILENAME = N’C:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\Data\MIBASEDEDATOS.MDF’ )
FOR ATTACH
GO

Sin indicarle el fichero LDF. Automáticamente SQL Server, genera un nuevo fichero LDF de transacciones.

Espero que este método pueda serte útil.

Haciendo Ping desde ASP.NET

Posted in Programación with tags , , on 10 junio, 2009 by febrer

Esta es una sencilla manera de realizar ping’s a equipos, indicando su ip o su nombre desde una página ASP.NET.

System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingReply pingreply = ping.Send("ip_o_nombre_equipo");
txtPing.Text += "Address: " + pingreply.Address.ToString();
txtPing.Text += "Roundtrip Time: " + pingreply.RoundtripTime;
txtPing.Text += "TTL (Time To Live): " + pingreply.Options.Ttl;
txtPing.Text += "Buffer Size: " + pingreply.Buffer.Length.ToString();

Recuperando elementos web con WebRequest a través de un proxy y validación básica en destino.

Posted in Programación with tags , , , on 10 junio, 2009 by febrer

Imaginate que quieres acceder a un gráfico (gif, bmp, etc …) alojado en un servidor externo a tu red local. En nuestro ejemplo son gráficos estadísticos que nos genera nuestro proveedor de internet, al cual hay que acceder mediante una validación. A parte, disponemos de un servidor proxy en nuestra empresa para acceder a internet, que tambien requiere validación.

En este escenario, la menera más sencilla (por supuesto utilizando .NET), es utilizar los objetos NetworkCredential, WebProxy y HttpWebResponse, para recuperar el gráfico deseado.

¿Como lo hacemos?

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
 
namespace TestWebRequest
{
class Program
{
static void Main(string[] args)
{
WebRequest request = WebRequest.Create("http://url_a_nuestro_proveedor/fichero_a_recuperar");

// establecemos las credenciales para el servidor ISA SERVER
NetworkCredential credentials = new NetworkCredential("usuario", "password","dominio.com");
//creamos el objeto proxy que nos permitira acceder a internet
System.Net.WebProxy proxy = new System.Net.WebProxy("nuestro.servidorisa.com",8080);

proxy.Credentials = credentials; //asignamos las credenciales al objeto proxy

request.Proxy = proxy; //asignamos el proxy al objeto WebRequest.

// Credenciales para acceder a nuestro proveedor de internet
NetworkCredential reqCredentials = new NetworkCredential("usuario", "password");
request.Credentials = reqCredentials; // asignamos las credenciales.

WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(stream);

Console.Write(streamReader.ReadToEnd());

Console.Read();
}
}
}

Si nuestra aplicación es de tipo web, tambien podemos indicar el servidor Proxy en el fichero Web.Config de nuestra aplicación web, de esta manera:

<configuration>
  <system.net>
    <defaultProxy>
      <proxy usesystemdefault="True"
        proxyaddress="<a ref="http://nuestro_servidor_proxy:8080/">http://nuestro_servidor_proxy:8080</a>"
        bypassonlocal="True">
    </defaultProxy>
  </system.net>
</configuration>