Entradas etiquetadas como ‘C#’

Crear dll con DevC++

Hola, no se ustedes… pero yo siempre me pregunte como rayos se crean esas cosas llamadas dll ( dynamic-link library | biblioteca de enlace dinámico ) y mas cuando en tiempos aquellos de Windows 98 llegaba a faltar alguna para ejecutar un programa.

Bien, empecemos definiendo que es en si un archivo dll. A groso modo un archivo dll viene siendo un archivo donde se encuentran almacenadas funciones que pueden llegar a ser llamadas por uno o varios programas.

Por ejemplo (recalco que es un ejemplo ficticio) :

El archivo msnmsgr.exe hace uso de sus bibliotecas [msgsres.dll, rtmpltfm.dll, psmsong.dll] exclusivas  para su funcionamiento, al igual que iexplorer.exe hace uso exclusivo de las suyas [jsdbgui.dll, , IEShims.dll, jsdebuggeride.dll] , pero los dos programas comparten la librería iexproxy.dll.

 

image

Los archivos dll además de ser compartidos por distintas aplicaciones, tienen la característica de que  pueden ser llamados en runtime (en ejecución).

Que ventajas nos trae que los programas compartan bibliotecas (*.dll) , la ventaja principal es el reducir el tamaño del programa ejecutable ( *.exe), pero al igual que existen ventajas, existen desventajas; la mas común y  odiada por todos es que un programa que desinstalamos desinstale una dll que era necesaria para otro programa.

Después de esta introducción, hablemos sobre el por que crear dll para nuestros programas. Siempre será mucho mas sencillo gestionar nuestra aplicación por módulos, donde se encuentren distintas funciones y sean fácilmente localizables, muy al estilo de las bibliotecas estáticas (*.h) a diferencia de las bibliotecas estáticas que se encuentran embebidas en el archivo exe, las bibliotecas de enlace dinámico (*.dll)  se encuentran, como archivos independiente reduciendo considerablemente el tamaño de nuestro archivo ejecutable, facilitando la actualización del mismo o bien de alguno de sus componentes.

Basta de hacerla de emoción, empecemos a escribir código.

1.- Abrimos DevC++ (mi versión es 4.9.9.2), Archivo –> Nuevo –> Proyecto

image

Elegimos “DLL”, de nombre colocamos “dll” y en tipo colocamos “En C”

 image

Guardamos nuestro proyecto como dll.dev

image

2.- Se abran creado 2 archivos automáticamente [ dllmain.c y dll.h ]

dll.h

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


DLLIMPORT void HelloWorld (void);


#endif /* _DLL_H_ */

dllMain.c

/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

DLLIMPORT void HelloWorld ()
{
    MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}


BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

3.-En realidad con eso tenemos creado nuestra DLL, no hace falta mas que compilar el archivo.

image

Una vez compilado el archivo veremos que se crea una dll en el directorio donde tengamos guardado el proyecto.

image

Antes de continuar, expliquemos algunas líneas de código.

Esencialmente en el archivo dll.h se declaran las funciones que serán exportables por el archivo dll, para ello tenemos las líneas siguientes:

   1: #ifndef _DLL_H_

   2: #define _DLL_H_

   3:  

   4: #if BUILDING_DLL

   5: # define DLLIMPORT __declspec (dllexport) //Export de la DLL

   6: #else 

   7: # define DLLIMPORT __declspec (dllimport) //Import de la DLL

   8: #endif 

   9: DLLIMPORT void HelloWorld (void); //Prototipo de la función HelloWord

  10: #endif /* _DLL_H_ */

Mientras que en el archivo dllmain.c tenemos:

Declaración de librerías.

   1: #include "dll.h" // Nombre de la libreria donde se declaran los prototipos

   2: #include <windows.h> // biblioteca Windows.h para el uso de dll

   3: #include <stdio.h> //Biblioteca de funciones estandar

   4: #include <stdlib.h> 

Definición de la función HelloWord

   1: DLLIMPORT void HelloWorld ()

   2: {

   3: //En la definicion colocamos un MessageBox con el texto Hello World 

   4: //Sintaxis de MessageBox

   5: // MessageBox( 0, "Mensaje de Salida","Titulo de Ventana",Tipo);
Tipos: MB_YESNOCANCEL | MB_ICONQUESTION | MB_SYSTEMMODAL | MB_OK
| MB_ICONEXCLAMATION |  MB_YESNO

   6:     MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);

   7: }

Declaración/prototipo de función DllMain:

   1: BOOL APIENTRY DllMain (HINSTANCE hInst/* Library instance handle. */ ,

   2:                        DWORD reason /* Reason this function is being called. */ ,

   3:                        LPVOID reserved /* Not used. */ )

Cuando Windows se vincula a una DLL de un programa, Windows llama a la función de la biblioteca DllMain. Esto significa que cada DLL debe tener una función DllMain.  La función DllMain debe ser definido como tal. Las palabras clave "BOOL", "APIENTRY", "HINSTANCE", etc, están todos definidos en <windows.h>.Por lo tanto, debe incluir ese archivo, incluso si no se usa ninguna API Win32 en su biblioteca

Esta función va a ser llamada automáticamente por cualquier programa que cargue automáticamente la librería.

Definiendo la función DllMain :

   1: {

   2:     switch (reason)

   3:     {

   4:       case DLL_PROCESS_ATTACH:

   5:         break;

   6:  

   7:       case DLL_PROCESS_DETACH:

   8:         break;

   9:  

  10:       case DLL_THREAD_ATTACH:

  11:         break;

  12:  

  13:       case DLL_THREAD_DETACH:

  14:         break;

  15:     }

  16:  

  17:     /* Returns TRUE on success, FALSE on failure */

  18:     return TRUE;

  19: }

APIENTRY es sólo una palabra clave que Windows utiliza internamente.Por lo tanto, no es necesario que te preocupes por eso.

La variable "hInstance" es el identificador de HINSTANCE para la biblioteca, y puede utilizar, o bien puede borrarlo.

Dentro de la definición de la función DllMain podemos encontrar la razón por la cual la biblioteca fue llamada, esto se controla con un switch siendo los siguientes casos:

DLL_PROCESS_ATTACH

En caso de que un programa se ha vinculado a la biblioteca por primera vez.

DLL_PROCESS_DETACH

En caso de que un programa se ha desvinculado de la biblioteca.

DLL_THREAD_ATTACH 
En caso de que un hilo de un programa se vinculado a la biblioteca.

DLL_THREAD_DETACH

En caso de que un hilo de un programa ha desvinculado de la biblioteca.

La función DllMain no necesita hacer nada especial para estos casos, aunque para algunas bibliotecas, podría resultar útil para asignar el almacenamiento de cada subproceso o un proceso nuevo que se está utilizando con la biblioteca.

La función DllMain debe devolver TRUE si la librería cargada con éxito, o FALSE si en la biblioteca había un error y no se pudo cargar. Si se devuelve FALSE, el programa mostrará un mensaje de advertencia y se cerrara.

La llamada de la biblioteca podrá producirse en dos ocasiones, una en la carga de la librería, siendo entonces el parámetro reason =  DLL_PROCESS_ATTACH y otra cuando se descarga la librería, en este caso, con el parámetro reason = DLL_PROCESS_DETACH.

Sin embargo, si no estamos interesados en saber alguna de las causas por la cual la biblioteca fue llamada por un programa, entonces podemos eliminar la sentencia switch y simplemente devolver un TRUE (return TRUE) .

Quedando de la siguiente forma:

   1: BOOL APIENTRY DllMain (HINSTANCE hInst 

   2:                        DWORD reason        

   3:                        LPVOID reserved    

   4: {

   5:     /* Returns TRUE on success, FALSE on failure */

   6:     return TRUE;

   7: }

 
Con eso tenemos una explicación de la sintaxis de nuestros dos archivos, el siguiente paso…. llamar la función  HelloWorld que se encuentra dentro de nuestra dll ( dll.dll ).
 

Llamando funciones del DLL desde un EXE

 
Para poder llamar nuestra función crearemos un nuevo “Código Fuente”.

image

Si nos pregunta si deseamos añadir el nuevo archivo al proyecto contestamos que No

image

 

El contenido de nuestro archivo será el siguiente:

// usar librería dinámica con enlazado dinámico
#include <windows.h>
#include <stdlib.h>
#include <iostream>
#include "dll.h"
//Puntero enlace
typedef void __stdcall (* FPTR)();

int main(int argc, char *argv[]) {
   FreeConsole();// Liberamos al programa de la consola
   HMODULE dllHandle = LoadLibrary("dll.dll");  // cargar librería 
   if (!dllHandle) {
      std::cout << "Error en la carga de dll.dll\n";
   }  else {
      FPTR llamada = (FPTR) GetProcAddress(dllHandle, "HelloWorld");
//Use GetProcAddress para devolver un puntero de función a una función en la biblioteca. 
      if (!llamada)
         std::cout << "Error al obtener direccion de HelloWord()\n";
      else llamada();

      FreeLibrary(dllHandle);    // descargar librería
//Una vez que haya terminado con un archivo DLL, y desea eliminarlo de la memoria,
//podemos llamar a la función FreeLibrary con identificador de módulo de la DLL. 
   }
//   system("PAUSE");
   return EXIT_SUCCESS;
}  

Guardamos el archivo como Llama_dll.cpp en el mismo directorio donde tenemos nuestro archivo dll.dll.

image

 

Cerramos DevC++ para cerrar nuestro proyecto dll.dev. y abrimos el archivo Llama_dll.cpp

image

Compilamos y ejecutamos

image

 

Y Wala! tenemos nuestro mensaje que definimos en la función HelloWord de la biblioteca  🙂 .

image

Es muy importante mencionar que si el archivo dll.dll no se encuentra en el mismo directorio donde ejecutamos Llama_dll.exe este no desplegaría el mensaje en pantalla.

Espero como siempre, les sea de utilidad 🙂 … dejo los archivos en el siguiente link:

Archivo_zipDescargar

 

Fuentes:

Un muy buen articulo que explica algunos conceptos

Wiki que explica a detalle la sintaxis

Ventanas Modales en DevC++

Documento Word que explica en muy resumidas cuentas como crear una dll

http://www.svetlian.com/dll/articulos_descripcion_dll.htm

http://www.zator.com/Cpp/E1_4_4b2b.htm#[2]

http://elblogroboticodepedro.weebercorp.com/2009/02/03/labview-31-crear-dll-en-c-con-dev-c-y-llamada-en-labview/

Video: http://www.youtube.com/watch?v=fzO9L6tlXDI

Anuncios

Generando números aleatorios en C y C++

Por que nunca esta por demás…

Primero que nada déjenme decirles que el lenguaje C incorpora dos funciones [rand() y srand()] las cuales son pseudo generadoras de números aleatorios; que quiero decir con “pseudo” , pues que en realidad no generan números aleatorios, si no que siguen un algoritmo, que muestran el resultado de un conjunto de operaciones (“numero aleatorio”) ; que al final de cuentas puede ser predecido teniendo dicho algoritmo.

Función rand()

Hablemos de la función rand() esta genera un numero aleatorio en el rango de 0 y 32767 (solo enteros) ; para obtener estos números el algoritmo de la función rand() parte de un “numero semilla” , quiero decir un numero inicial al cual somete a un conjunto de operaciones para así generar los números “aleatorios”, lo único malo de esta función es que siempre que queramos generar números aleatorios este algoritmo siempre partera de la misma semilla y realizara las mismas operaciones, por lo que obtendremos los mismos números aleatorios una y otra vez… sin importar las veces que ejecutemos el programa.

A continuación un ejemplo:

   1: #include <iostream.h>

   2: #include <stdlib.h>

   3: //Dentro de stdlib.h encontramos la funcion rand()

   4: #include <conio.h>

   5:  

   6: int main(){

   7:  

   8: long int aleatorio=0;

   9:  

  10: cout<<"Programa que genera numeros aleatorios con la funcion
rand()"
<<endl;

  11: aleatorio = rand();

  12: cout<<"El numero aleatorio generado es: "<<aleatorio <<endl;

  13: cout<<"El numero generado se encuentra en un rango del 0 al "<< RAND_MAX <<endl;

  14: getch();

  15:  

  16: }

La función rand() se encuentra en la librería stdlib.h, la palabra reservada RAND_MAX -> regresa el valor máximo de la función rand().

Hasta aquí creo que todo simple… empezamos con la emoción al momento que queremos un numero aleatorio entre un rango personalizado, por ejemplo del 0 al 5:

   1: #include <iostream.h>

   2: #include <stdlib.h>

   3: #include <conio.h>

   4:  

   5: int main(){

   6: long int aleatorio=0;

   7:  

   8: cout<<"Programa que genera numeros aleatorios de rango 0 a 5"<<endl;

   9:  

  10: aleatorio = rand() % 6;

  11: cout<<"El numero aleatorio generado es: "<<aleatorio <<endl;

  12: getch();

  13: }

Estamos utilizando el operador modulo (%) que es el residuo de una división, para delimitar el rango de la variable “aleatorio”.

Analizando este paso, suponemos que el numero obtenido de la función rand() es el 12 y lo dividimos entre el numero 6;  obteniendo su modulo (residuo) que es igual a 0 (imagen1).

imageimagen1

La variable “aleatorio” que es igual a “0”  se encuentra en el rango de 0 a 5 y podemos confirmar que todas las variables “aleatorioque sean obtenidas aplicado a la función rand() una operación “modulo de 6 [ rand() % 6 ] se encontraran en este rango (0 a 5).

Para confirmar este argumento; asignemos otro valor ficticio a nuestra función rand(), por ejemplo el numero 8:

imagen2 

El numero obtenido es el 2, por lo que una vez mas nuestra variable “aleatorio” se encuentra en el rango de 0 a 5. Así podemos continuar asignando valores ficticios y arbitrarios a la función rand() y demostraremos que la variable “aleatorio” puede obtener el valor 0 ó 1 ó 2 ó 3 ó 4 ó 5  sea cual sea el dividendo con el que alimentemos la división.

El residuo de 12 entre 6 es cero “0” , lo comprobamos con el siguiente programa:

   1: #include <iostream.h>

   2: #include <stdlib.h>

   3: #include <conio.h>

   4:  

   5: int main(){

   6: int residuo=0;

   7: /*

   8: inicializar la variable var_rand en 12 es como

   9: simular que el resultado de la funcion

  10: rand fue igual a 12

  11: */

  12: int var_rand=12;

  13: //Digamos que equivale a

  14: //aleatorio= rand() % 6

  15: residuo= var_rand % 6;

  16: cout<<"El numero aleatorio generado es: "<<residuo <<endl;

  17: getch();

  18: }

La variable var_rand viene a emular el resultado de la función rand() solo que aquí nosotros damos el valor arbitrariamente (en este caso el 12).

🙂 muy bien , con eso espero allá quedado claro; ahora si quisiera un numero aleatorio entre el 0 y el 20 , solo cambiaria la línea del programa:

aleatorio = rand() % 21;

y si lo quiero en  un rango 0 a 50 entonces:

aleatorio = rand() % 51;

… y de rango 0 a 87:

aleatorio = rand() % 88;

Como ya nos dimos cuenta la formula es sencilla [ aleatorio = rand() % (N+1); ], si queremos hacer un rango de 0 a n , entonces la línea de código quedaría así:

aleatorio = rand() % n+1;

 
Pero aun con el rango continuamos con el problema que cada vez que ejecutamos el programa se generan los mismos números.

Función srand()

Para solucionar ese problema contamos con la función srand() con la cual indicamos el numero semilla con el que empezara el algoritmo para generar números aleatorios.

#include <iostream.h>

#include <stdlib.h>

#include <time.h>

#include <conio.h>

 

int main()

{

 long int aleatorio=0;

 srand(1);

 aleatorio = rand()%11;

 cout<<"Numero aleatorio de 0 a 10"<<endl;

 cout<<aleatorio;

getch();

}

Ya podemos generar realmente números aleatorios el único problema es que tenemos que cambiar el numero semilla manualmente (ósea borramos en el código el numero 1 de la función srand(1) y escribimos otro srand(34) )  efectivamente salen números aleatorios … pero si queremos GENERAR VARIOS NUMEROS ALEATORIOS EN UNA MISMA EJECUCION DEL PROGRAMA:

   1: #include <iostream.h>

   2: #include <stdlib.h>

   3: #include <time.h>

   4: #include <conio.h>

   5:  

   6: int main()

   7: {

   8:  long int aleatorio=0;

   9:  cout<<"Programa que genera 10 numeros aleatorios con srand(1)"<<endl;

  10:  srand(1);//Utilizo el numero 1 como semilla

  11:  for(int i=1; i<=10; i++){ // Ciclo for para generar 10 numeros

  12:  aleatorio = rand()%11;

  13:  cout<<i<<".-Aleatorio = "<<aleatorio<<endl;

  14:  }

  15: getch();

  16: }

🙂 Wow!! funciona… …. aunque tiene un detallito… si lo ejecutamos de nuevo SALDRAN LOS MISMOS NUMEROS y no queremos eso… lo que queremos es que cada vez que se ejecute el programa genere números aleatorios nuevos. Para solucionarlo utilizaremos un truquito el cual es inicializar nuestra semilla con la hora del sistema rand(hora_del_sistema) 😀 .

1.- Agregamos la librería time.h

2.- Modifico la línea srand(1) a srand (time(NULL))

   1: #include <iostream.h>

   2: #include <stdlib.h>

   3: #include <time.h>

   4: #include <conio.h>

   5:  

   6: int main()

   7: {

   8:  long int aleatorio=0;

   9:  cout<<"Programa que genera 10 numeros aleatorios con srand
(time(NULL))"
<<endl;

  10:  srand (time(NULL)); //Utilizo la hr del sistema como semilla

  11:  for(int i=1; i<=10; i++){ // Ciclo for para generar 10 numeros

  12:  aleatorio = rand()%11;

  13:  cout<<i<<".-Aleatorio = "<<aleatorio<<endl;

  14:  }

  15: getch();

  16: }

*DATO: la función srand() solamente la podemos usar una vez en el programa no traten de engañar al programa usándola varias veces por que los tirara de a locos

bueno.. esta es una forma BASICA de generar números aleatorios, existen otras cuantas como por ejemplo usar la función  getpid(); (regresa el ID del programa en ejecución asignado por el Sistema Operativo)  envés de usar time(NULL); y otras miles de formas mas.

Si desean pueden descargar el código de estos ejemplos:

page_white_compressed1[1] Descargar ejemplos de números aleatorios en C y C++

-Los ejemplos fueron compilados con Borland C++ 5.2

 

El dato extra:

Existen otras dos funciones para generar numero aleatorios las cuales son: drand48() y srand48() si desean saber mas de ellas visiten este link

Puedo recomendar un libro que se llama: El arte de la intrusión de autor Kevin Mitnick y editorial ALFAOMEGA.RA-MA donde en su primer capitulo se aprecia la importancia de generar números aleatorios que realmente sean aleatorios 😀 que mejor ejemplo que un CASINO ELECTRONICO ¿no?.

Update:

He mejorado la explicación del por que utilizamos el modulo para delimitar a un rango la generación de números aleatorios.

Si desean hacer un programa que genere números aleatorios con un rango definido ( numero mínimo a obtener y numero máximo a obtener) pueden revisar el siguiente programa: page_white_compressed1[1] DESCARGAR

[+][+][+]

Fuentes:

http://www.chuidiang.com/clinux/funciones/rand.php

http://www.agner.org/random/

http://www.daniweb.com/forums/thread1769.html

Complemento para Windows Live Writer

Utilizar system() en Cygwin con Windows

Hola, hace rato que no posteo; ahora comparto algo pequeño pero útil. De un tiempo para acá instale NetBeans para compilar archivos de C y C++ por lo que seguí el siguiente tutorial Instalar y Configurar el Soporte para C/C++ (MUY IMPORTANTE INSTALEN LAS LIBRERIAS Y ARCHIVOS NECESARIOS gcc-core: el compilador C, gcc-g++: el compilador C++, gdb: el depurador GNU, y make: la versión GNU de la utilidad ‘make’ ).

Todo estaba perfecto hasta que llegue al punto de… tener que limpiar la pantalla donde para mi suerte ya no utilizo la librería <conio.h> por lo tanto la función clrscr() quedo en el olvido, entrando como sustituta la función system(“cls”) 😛 pero al ejecutar dicha instrucción el resultado era el siguiente:

sh: cls: command not found

Aquí una pantallita:

image

El código que utilice fue el siguiente:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
printf("Hola como estan\n");
printf("Esto es un ejemplo de limpiar pantalla\n");
system("cls");
return EXIT_SUCCESS;
}

Para no entrar en detalles , les comentar que esto sucede por que sh.exe (Cygwin) es una emulación del shell de Unix por lo que la instrucción “cls” NO EXISTE pero podemos solucionarlo con el siguiente truco:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
printf("Hola como estan\n");
printf("Esto es un ejemplo de limpiar pantalla\n");
system("cmd /c cls");  // 😉 Aqui esta el truco
return EXIT_SUCCESS;
}

Si tienen algún problema al ejecutar system("cmd /c cls") , pueden intentarlo escribiendo system("cmd.exe /c cls"), y si ni con eso funciona su limpiar pantalla; entonces utilicen la instrucción:

printf("\e[2J");  —> TODO JUNTO SIN ESPACIOS

Y como es lógico, si desean hacer uso de otro comando con system() por ejemplo enlistar los directorios, tendrían que hacerlo de la siguiente forma:

system("cmd /c dir");

Espero les sea de gran ayuda, ya que para mi lo fue 🙂 .

PD.- Yo utilizo NetBeans por que en lo personal no me agrada DevC++ y además tener una consola shell en Windows siempre trae cosas buenas 😉

NOTA: Recuerden que si van a hacer copy/paste deben sustituir las “”(comillas) que WordPress cambia.

Fuente(s):

http://forum.codecall.net/c-c/9024-c-system-not-working-cygwin-bash-shell.html

http://cygwin.com/ml/cygwin/2004-03/msg00888.html

http://objectmix.com/c/34035-posix-getch-clrscr.html

Uso de cookies en proyectos web

¿Qué son las cookies?

Una cookie es un pequeño fragmento de texto que acompaña a las solicitudes y las páginas a medida que avanzan entre el servidor Web y el navegador. La cookie contiene información de la aplicación Web pueden leer cuando el usuario visita el sitio.

La forma de definir una Cookie en VB.NET es:

Response.Cookies("userName").Value = "patrick" Response.Cookies("userName").Expires = DateTime.Now.AddDays(1) Dim aCookie As New HttpCookie("lastVisit") aCookie.Value = DateTime.Now.ToString() aCookie.Expires = DateTime.Now.AddDays(1) Response.Cookies.Add(aCookie)

Mientras que en C# se define una Cookie :

Response.Cookies["userName"].Value = "patrick"; Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1); HttpCookie aCookie = new HttpCookie("lastVisit"); aCookie.Value = DateTime.Now.ToString(); aCookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie);

aunque fuera de todo esto tenemos la opcion de acoplar estos metodos a nuestros Web Slices de internet Explorer 8.

Web Slices pueden aprovechar algunas de las características de seguridad de una página Web estándar o Really Simple Syndication (RSS)

Uso de "cookies" Conservación de perfil de usuario

Basado en cookies de autenticación ampliamente extendido y funciona independientemente de la configuración de seguridad de la Web Slice. Usted puede utilizar cookies para almacenar información no sensible, las preferencias de usuario, Configuración del Web Slice, y así sucesivamente. En este ejemplo, utilizamos cookies para almacenar el perfil de usuario en el sitio Web y luego recuperar la misma información desde dentro de la Web Slice

image7[1] Descarga el código fuente

Almacenar las credenciales de usuario (ASP.NET Membership)

Basado en cookies de autenticación es flexible y fácil de implementar, sin embargo, usted no debe guardar cualquier información confidencial (por ejemplo, nombre de usuario y contraseña) en texto plano a fin de evitar mensajes de seguridad.

image7[1] Descargar código fuente

Uso de HTTPS en IIS + Recopilación de garantizar la Web Slice

Web Slices también compatibilidad con HTTP y Secure Hypertext Transfer Protocol (HTTP) de seguridad (de base o digerir). Si va a utilizar este tipo de seguridad, por favor, tenga en cuenta que estos modos de autenticación no son compatibles con Web Slices, que usan una fuente alternativa o actualización de la pantalla.

image7[1] Descargar código fuente

Mas info sobre cookies en C# o VB.NET Click aqui

Mas info de Cookies en WebSlices Clic qui

Web Service – “Servicio Web” con ASP.NET

No tengo idea por que… pero muchos de mis compañeros me an preguntado sobre como hacer un Web Service… y la suerte esta de su lado el amigo Edison realizo un pequeño tuto de como hacer uno muy facilmente dejo la liga: http://mredison.wordpress.com/2009/03/25/servicios-web-en-aspnet/

y algunos links que ayudan a despejar dudas…

DEFINICION DE UN WEB SERVICE: http://www.webtaller.com/maletin/articulos/que_son_web_services.php
EJEMPLO 1- http://www.elguille.info/NET/universidad/WebServices1/WebServices1.htm
EJEMPLO 2- http://www.elguille.info/NET/universidad/WebServices2/WebServices2.htm

Espero hacer un pequeño tuto en el tiempo libre que tenga… =P

Nube de etiquetas