31 de octubre de 2014

Crear y consumir un Web Service C#

Teniendo instalado el IIS lo primero sera abrir el VS, en mi caso VS 2013 y crear un nuevo sitio web


ahora especificar un nombre y la ubicación, como se da por supuesto tener el IIS instalado, se guardara el web service en la carpeta web del IIS con el nombre blogspot tal como muestra la imagen


Para verificar que se creo la carpeta, se puede acceder a ella y verificar la existencia de los archivos


si desean crear primero la carpeta en su directorio web y después agregar el webservice pueden lograrlo sin mayor dificultad, simplemente le especifican al VS al momento de la creación donde debe ir a guardar el web service

Ahora lo primero que se hará en el código sera cambiar el namespace que por default aparece por el que a ustedes se les facilite

lo siguiente sera crear un nuevo Webmethod Saludo que recibe dos parámetros y devuelve un string, este webmethod lo consumiré desde una aplicación que se creara mas adelante


ahora lo probamos, en mi caso lo haré desde el Google Chrome


y asi se muestra el servicio desde el navegador con los dos métodos, dar click en Saludo 


se pedirán los dos parámetros que debe recibir el método, tal como lo especifique en el código de este


y la salida se muestra en XML


Ya con esto creamos un web service --que ustedes lo pueden hacer mejor no lo dudo-- pero ahora pasare a probarlo en una aplicación de escritorio, lo primero que debo hacer es publicarlo en IIS.

Publicar Web Service en IIS 8

Ahora se debe dar click derecho en el website y dar click en Build Web site


y luego dar click derecho sobre el website y seleccionar Publish Web site


se abrirá una ventana desde la opción Profile(menu en parte izquierda de la pantalla) en que se debe seleccionar la opcion Custom


y se debe escribir un perfil, luego dar click en OK


Ahora en la opción Connection(menu en parte izquierda de la pantalla), se debe cambiar el Publish method a File System


y luego en la parte de abajo especificar la ubicación del web service desde la carpeta wwwroot


Quedando de la siguiente manera, ahora solo queda darle click al botón Publish


Lo que sigue es abrir el administrador de IIS


y seleccionar la carpeta de nuestro web site tal como muestro en la figura


y sobre esta damos click y seleccionar Convertir en aplicacion


y tendremos la siguiente ventana, dar click en 


Ahora nos vamos a examinador de directorios y damos doble click sobre el elemento


y seleccionamos habilitar dal como se ve en la parte izquierda de la figura


y ahora escribimos en el navegador la dirección de nuestro web service tal como se muestra


Consumir web service desde Windows App

Se puede consumir desde aplicación web o de escritorio, en este caso la consumire el servicio web desde una aplicación de escritorio en C#, para eso creamos un nuevo Windows Forms App y lo llamamos consumidor


La ventana principal tendra la siguiente apariencia


Ahora dar click derecho en la aplicacion y seleccionar agregar nueva referencia tal como se muestra


en la pantalla que aparece seleccionar Advanced


y a continuación seleccionar Add Web Reference 


seleccionar Web Services on the local machine


y luego seleccionar el web service que se desea consumir, en este caso, seleccionar blogspot


y en la siguiente pantalla tendremos los metodos de nuestro web service, la direccion url para acceder al web service y se debera especificar una referencia para este, en mi caso deje la refernecia a web service con el nombre referencia, uego solo dar click en Add reference


Ahora viene el código, lo primero es agregar la referencia: using Consumidor.referencia;
luego programar el evento del botón Consumir, les dejo la imagen para que ustedes escriban las lineas de código en su programa...funciona !!!





Fin.























Error HTTP 500.19 - Internal Server Error

  1. Abrir el Panel de Control, Programas, Activar o desactivar las características de Windows.
  2. Aparecerá una ventana con todas las características de Windows; deberemos buscar  la casilla Internet Information Services, y verificar que las siguientes opciones estén seleccionadas
Error Http 500.19, Caracteristicas IIS
viernes, octubre 31, 2014

19 de mayo de 2014

Instalando Limesurvey con Wordpress

Primero descargar la version de Limesurvey a utilizar, tal como especifico Zinnia se utilizara la versión limesurvey192plus-build120919 la cual se descarga de acá
http://www.limesurvey.org/en/archived-releases/viewcategory/24-archived-releases

porque no utilizar la mas reciente? porque no es compatible ni con el php ni el Mysql que estamos utilizando, están abajo de la pagina las especificaciones.

1. Lo descargan y luego lo decomprimen, quedense solo con la carpeta limesurvey, cópienla y coloquenla en el directorio de archivos de su servidor(cada quien sabe donde se alojan sus directorios).

2. ahora se debe configurar el config.php, este archivo esta en el directorio raíz


lo que mas nos importa es esto:

$databasetype       =   'mysql';       

$databaselocation   =   'localhost';  
$databasename       =   'limesurvey';  
$databaseuser       =   'tu usuario de la base de datos';       
$databasepass       =   'tu password de la base de dats';            
$dbprefix           =   'lime_';      
$rooturl            =   "http://{$_SERVER['HTTP_HOST']}/limesurvey";

fijense que el /limesurvey corresponde al nombre de la carpeta que copiaron en su directorio de archivos a publicar...por ultimo y muy importante, por defecto el usuario y password de Limesurvey son:

$defaultuser        =   'admin';           
$defaultpass        =   'password';       

ustedes sabrán si lo cambian.

3. nos metemos a http://localhost/limesurvey/admin/install/ y crean la base de datos.

y luego dejan que Limesurvey cree las tablas necesarias


deberian tener algo como esto


4. ahora debemos ir de nuevo a la carpeta Limesurvey y busquen el archivo install y cambien el nombre por old.instal


5. ahora ya deberian poder empezar a utilizar Limesurvey con esto http://localhost/limesurvey/admin/

pueden cambiar la configuración aquí:


modificar su usuario


y crear nuevos, eso dependerá del DAE


Luego deben descargar el plugin SurveyPress de esta direccion
http://wordpress.org/plugins/surveypress/

lo agregan al Wordpress y luego lo configuran, en mi caso me sirve esta configuracion:


Para comprobar, salgan de Wordpress y vuelvan a ingresar con su usario, no deberia darles ningun problema, sino ahi esta Google.

14 de mayo de 2014

WordPress no pudo establecer una conexión segura con WordPress.org

si te aparece este error al querer intalar un theme o plugin en Wordpress:

Warning: Ha sucedido un error inesperado. Algo fue mal con WordPress.org o con la configuración de este servidor. Si continuas teniendo problemas, por favor prueba en los foros de soporte. (WordPress no pudo establecer una conexión segura con WordPress.org. Por favor, contacta con el administrador de tu servidor.) in C:\Apache2.2\htdocs\wp-includes\update.php on line 119

lo que debes hacer es ir a la carpeta wp-includes y abrir el archivo de texto class-http, ahi debes modificar esta parte: 
de  'sslverify' => true, 
cambialo a   'sslverify' => false,

guarda todo y reinicia tu server, es todo.

26 de abril de 2014

Consejos con ASP.NET


Mientras cree cualquier sitio web, debe mantener en mente algunos puntos para mejorar su rendimiento.

1.) Configure el debug=false de la siguiente manera:

< compilation default Language="c#" debug="false" >

2.) Use Server.Transfer en vez de Response.Redirect.

3) Compruebe siempre Page.IsValid cuando se utilizan controles Validator.

4) Use Foreach loop en lugar de For loop para String Iteration.

5) Utilizar la validación del lado cliente donde sea posible.

6.)Verifique “Page.IsPostBack”. Para evitar la repetición de la ejecución de código.

7.)GIF y PNG son similares, pero PNG normalmenteson de menor tamaño. (Es verdad, pero algunos navegadores no apoyar el formato PNG)

8.)Usar el AppOffline.htm cuando se actualiza binarios.

9.)Desactivar Tracing, a menos que sea requerido. (por defecto esta desactivada, uselo en las páginas en las que es necesario)

< trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true"/ >

10.)Precompile las páginas y desactivar AutoEventWireup; colocar el atributo AutoEventWireup en false en el archivo Machine.config.

11.)Apague el estado de la sesión, si no es necesario.

< sessionstate timeout="20" cookieless="false" mode="Off" stateconnectionstring="tcpip=127.0.0.1:42424" sqlconnectionstring="data source=127.0.0.1;Trusted_Connection=no" >

12.)Seleccione el modo de Release (versión final) antes de hacer la construcción para su aplicación.

14.)Deshabilitar Viewstate cuando no se requiere.

EnableViewState="false"

15.)Evite frecuentes viajes de ida y vuelta a la base de datos.

16.)Use caché para mejorar el rendimiento de su aplicación.

17.)Validar todos los ingresos recibidos de los usuarios.

18.)Utilice método Finally para matar a los recursos.

19.) Use el StringBuilder en lugar del String ya que ocupan una posición de memoria diferente en cada momento de la modificación. 

20.) Nunca use directamente el Objeto; primero obtenga el valor del objeto en la variable local que usara. Se tarda más tiempo entonces la lectura de variables.

21.)Evite las excepciones: Use la condición if (si se trata de comprobar la condición adecuada)

22.)Optimización de código: Evite el uso de código como x = x +1; es siempre mejor usar x + = 1.

23.)Técnicas de Acceso a datos: DataReaders proporciona un método rápido y eficaz de recuperación de datos. DataReader es mucho más rápido de DataSets en lo que refiere al rendimiento

24.)Como siempre, evitar las variables de sesión, ya que cada página ASP se ejecuta en un subproceso diferente y pide período de sesiones se serializa una por una. Así pues, este pondra mas lenta la aplicación. En lugar de las variables de sesión se puede utilizar la colección QueryString o variables ocultas en la forma que tiene los valores

25.)Habilite buffering mejorará el rendimiento.

< % response.buffer=true % > 
< % response.flush=true % > 


26.)Utilice el control Repeater en lugar de DataGrid, DataList, porque es eficiente, personalizable y programable.

27.)Las Lista de datos(Data listing) consumen más tiempo para grandes volúmenes de datos cuando se recupere datos de la base de datos.

Paginación mostrará sólo los datos en particular, sino tomar la carga de todos los datos. 
Buscar sólo los datos que se necesita para la página actual.


28.)Evite los JavaScript y CSS en linea(Inline)

29.)Utilizan un solo archivo CSS en lugar de múltiples archivos CSS.

Lo posible se deben combinar todas las clases CSS basado en un solo css. Archivo como mucho. Archivos CSS provocará una gran cantidad de solicitudes, independientemente del tamaño de los archivos. 

. archivos CSS normalmente se almacena en caché de los navegadores, así que un único y fuerte. css no causa de una larga espera en cada solicitud de página. 

En línea. Clases CSS podría hacer HTML pesados, por lo que de nuevo: seguir adelante con un archivo de single.css

30) Reducir el tamaño de las cookies.

31.) Comprimir CSS, JavaScript e imágenes.

Compresores en línea están disponibles, para comprimir el archivo por favor se refiere siguientes web y reemplazar el contenido de su archivo con optimizar el código.

32.)Use Cache apropiadamente.

33.) No haga las variables public or proteted, trate de mantenerlo private y use public/proteted como propiedades.

34.)Use strString=string.Empty en lugar de strString="" [Y tal vez en lugar de strString=null tambien (?)]

35.) Hacer sus paginas lo más ligero posible. La idea es tratar de evitar márgenes innecesarias, por ejemplo, uso de elementos div en lugar de tablas.

36.)Escribir mensajes estáticos en div y hacerlo visible cuando sea necesario. Esto es más rápido que dejar que el servidor establezer la propiedad Text en el label o div.

37.)Recuperar datos de la base de datos en una sola vez, si es posible. Asi no se hacen muchos viajes a la base de datos. Para ello, se combinan los campos de datos de diferentes tablas y seleccionarlos.

26 de marzo de 2014

Serialize C#

En muchas de nuestras aplicaciones cuando la funcionalidad que damos se vuelve cada día mayor es necesario intercambiar información digamos más compleja que un simple dato de tipo carácter o numérico, podemos pensar quizá en los datos completos de un empleado (nombre, edad, domicilio, RFC, foto, etc...) o incluso una colección de ellos. Este intercambio puede ser entre aplicaciones, a nivel de Base de datos, usando la misma plataforma que la nuestra o incluso una distinta y con plataforma me refiero no solo al sistema operativo, sino que también a la tecnología con la que estamos desarrollando. ¿Qué sucederá cuando necesitemos comunicarnos con una aplicación echa en Java por poner un ejemplo?



Pues bien, la serialización viene al rescate, ya tenemos el escenario, nuestro problema está en la mesa. Tenemos nuestras clases, instancias concretas de esas clases y necesitamos almacenar y transmitir esa información. Aquí empezare a hacer hincapié que la serialización no es la panacea y que ahora debamos grabar así siempre en la Base de Datos o mandar de esa forma la información a otros sistemas, NO AHÍ COSAS BUENAS O MALAS, existen necesidades especificas y soluciones y está en nosotros saber identificar cuando debemos usar una pistola o un matamoscas.
Empezaremos con la serialización en formato binary, serializar es el proceso de crear un stream de bytes a partir de un objeto (una instancia concreta). Supongamos que tenemos una clase que se llama Empleado.


Si nosotros queremos serializar un objeto de esa clase necesitamos agregar el atributo [Serializable] a nuestra clase, si intentáramos serializar una clase que no tiene este atributo se generara una excepción.


Retomando lo que veníamos platicando si serializar es colocar nuestra instancia concreta en un stream de bytes ¿qué mas necesitamos?

1)Una instancia de nuestra clase Empleado

2)Un objeto de tipo stream que es donde almacenaremos nuestra instancia en un formato diferente, en este caso usaremos un objeto de tipo FileStream, esta clase nos proporciona nada menos que 15 constructores, usaremos lo necesario y eso es solo indicar el nombre del archivo que se generara y el modo en que estamos creando el objecto que es Create.

3)Requerimos por ultimo especificar la forma en que vamos a serializar,para serailizar en formato binary requerimos un objecto de tipo BinaryFormatter, este objecto nos permitira con el metodo “Serialize” serializar nuestra instancia concreta en el archivo stream que creamos, es decir lo vaciamos.


Hasta aquí hemos visto como convertir nuestra información de un objeto , ahora ¿qué sucede cuando necesitamos recuperar el objeto que serializamos?

1) Requerimos una variable del tipo de nuestra clase (NO una instancia).

2) Requerimos nuevamente un objeto de tipo stream para esta vez abrir el archivo que se genero y que contiene nuestra información serializada.

3) Requerimos nuevamente el objeto de tipo BinaryFormatter para esta vez con su metodo “Deserialize” deserealizar nuestra información y por ultimo hacer un cast de la información que hemos deserializado y setearlo a la variable que creamos en el paso 1


Comentarios :

I)BinaryFormatter es la mejor opción para serializar y deserializar objectos que solo seran interpretados por aplicaciones desarrolladas en .NETFrameWork
II)Existen otros "formateadores" XML , SOAP y Custom Serialization que son mas adecuados para ambientes que involucran sistemas operativos y aplicaciones ajenas al NetFrameWork e incluso a Windows y que nos permiten mayor flexibilidad.
III)Es una buena practica hacer nuestras clases serializables, aun cuando no tengamos claro si se usara, el dicho es "si ahi duda haslas serializables".

Los espacios de nombre utilizados fueron :
System.Runtime.Serialization.Formatters
System.Runtime.Serialization.Formatters.Binary
System.IO

Y regresando a la mecanica de plantear problemas dejo la pauta para la parte II con lo siguiente :
¿y si quiero que algunos miembros no sean serializables?
¿Como evitar problemas de compatibilidad entre versiones de mis clases?¿que pasa si agrego una nueva propiedad despues de que las clases ya estan siendo consumidas?
¿cual es la mejor practica para propiedades calculadas?

11 de marzo de 2014

Validación no-intrusiva en ASP.NET 4.5

Unobtrusivevalidation_error

1.- Deshabilitar la validación no-intrusiva página  por página

Esto habilitará la validación tradicional de versiones anteriores de ASP.NET Web Forms (hasta la 4.0).
Hacerlo de esta manera, a mano, es tedioso si tienes más de un par de páginas con validadores, pero es muy sencillo. Simplemente tendremos que añadir esta línea al evento Load de tu página:
   1: Page.UnobtrusiveValidationMode = System.Web.UI.UnobtrusiveValidationMode.None;

2.- Deshabilitar la validación no-intrusiva para toda la aplicación

Para conseguirlo tenemos que agregar una línea a nuestro archivo de configuración web.config, colocándola en el nodo appsettings, así:
   1: <appSettings>
   2:     <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
   3: </appSettings>