Ver por etiquetas

Todas las etiquetas » .NET 2.0 (RSS)

Consumir un Webservice SSL

Mas sencillo de lo que imaginaba, se trata simplemente de definir el siguiente delegado System.Net.ServicePointManager.ServerCertificateValidationCallback con la funcion que se encarga de validar el certificado. Por ejemplo: System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidateSSL); Y escribimos el metodo: static Boolean ValidateSSL( object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors...
Publicado por Valeriano Tórtola | con no comments
Archivado en: ,,

Cargar un tipo dinamicamente

Una aplicación modular suele ser una aplicación donde sus funcionalidades son opcionales, de forma que podemos quitar ó añadirlas según nos convenga. La aplicación solo sabe que va a tratar con instancias que cumplen un determinado contrato, ya sea cumpliendo con una interfaz ó determinado tipo base (usando clases abstractas). Estos contratos suelen estar en ensamblados que conocen las dos partes, de forma que la aplicación espera una instancia de clase que cumple el contrato definido en el ensamblado...

Conversion de arrays sin cast directo con C#

Realizar casting entre clases es siempre sencillo, el inconveniente es cuando se trata de un arrays. Por ejemplo... sabiendo que la clase Manager deriva de Employee , si tenemos un array de Manager , es fácil convertirlo en un array de Employee usando casting directo: Employee[] employees1 = (Employee[])managers; Pero si tenemos un array de Employee no es posible convertirlo en un array de Manager de la misma forma que tampoco podríamos hacer un casting directo entre objetos simples. No se me ocurre...
Publicado por Valeriano Tórtola | 2 comment(s)
Archivado en: ,,

Desechable o no desechable

La interfaz IDisposable nos provee del método .Dispose() que utilizamos para liberar los recursos que esta usando ese objeto, pero dicho método... no deja de ser un simple método ;) Solo hace falta hacer una pequeña prueba para darse cuenta: 1: class Program 2: { 3: static void Main( string [] args) 4: { 5: Desechable test = new Desechable(); 6: 7: test.Dispose(); 8: 9: Console.WriteLine(test.Cadena?? "Muerto" ); // Muestra: Vivo! 10: Console.ReadKey( true ); 11: } 12: } 13: 14: class Desechable...
Publicado por Valeriano Tórtola | 2 comment(s)
Archivado en: ,,

Asistente P/Invoke Interop

Si trabajas con p/invoke tanto habitual como eventualmente y pinvoke.net esta en tus bookmarks... esta herramienta no te va a dejar indiferente :D Leo en el blog del BCL Team : El equipo Interop ha publicado recientemente una nueva herramienta llamada P/Invoke Interop Assistant . Esta herramienta genera automáticamente las declaraciones en C# ó VB.NET de las llamadas p/invoke nativas. Incluye una búsqueda rápida por las librerias comunes Win32 y permite generar las declaraciones para cualquier otra...
Publicado por Valeriano Tórtola | 3 comment(s)
Archivado en: ,,

Recursividad y yield return. Haciendo queries a colecciones en arbol en C# 2.0

Estoy disfrutando de lo que será mi último proyecto en C# 2.0 y .NET 2.0 antes de pasar a WPF, y la verdad es que se hace amargo algunas veces cuando ya conoces C# 3.0, por ejemplo se hecha de menos LINQ :D En este artículo quiero demostrar como hacer queries a una colección de elementos en forma de arbol desde C# 2.0, de forma que se pueda definir el tipo de colección, criterio de búsqueda que se quiere usar y obtener los resultado conforme se vayan obteniendo. Una función recursiva , es una función...

Pooling de llamadas asincronas

Hora de volver a trabajar... asi que toca quitarle el polvo al Visual Studio que tenia abandonado ya estos meses, la buena vida se acaba... xD En determinadas ocasiones, necesitamos lanzar un cierto número de ejecuciones en paralelo y esperar a que terminen todas para devolver el resultado final. Existen diversas formas de hacerlo, y yo voy a poner la que, después de darle un par de vueltas... me parece la mejor y más sencilla, ... se puede hacer aún mejor, pero no se si más sencilla... y no se si...

Trabajando con el registro de Windows desde C# y .NET

Manejar el registro de Windows es algo... en parte tedioso por lo extenso y medianamente documentado que esta lo que contiene. En mi humilde opinión, es algo a evitar siempre que sea posible en virtud de los archivos de configuración; pero en ocasiones necesitamos crear/modificar entradas que afectan al funcionamiento de otros programas ó del propio Windows desde nuestras aplicaciones, asi que hay que arremangarse y meterle mano :D Primero un pequeño repaso de como se estructura la información a...
Publicado por Valeriano Tórtola | 3 comment(s)
Archivado en: ,,

Parsear los argumentos de la línea de comando

Para determinadas situaciones, es más útil parametrizar nuestras aplicaciones desde los argumentos que pasamos al ejecutable que desde un archivo de configuración, sobre todo si es una aplicación de consola. El problema suele ser que lo que nos llega a nuestra aplicación es un array de cadenas y nosotros debemos relacionarlas entre ellas, pudiendo haber distintos tipos de elemetos como modificadores, parámetros, parámetros de los modificadores y distintas cantidades de ambos tipos de parámetros....

Dar el foco a una aplicación externa

Para dar el foco a una aplicación externa a la nuestra, se usa el método SetForegroundWindow de user32.dll mediante PInvoke : [DllImport( "user32.dll" )] public static extern bool SetForegroundWindow(IntPtr hWnd); Simplemente hay que encontrar el proceso y pasar a este método el puntero Process.MainWindowHandle , que apunta a la ventana principal de la aplicación, por ejemplo asi: Process runningProc = Process.GetProcessesByName( "notepad" ).First(); SetForegroundWindow(runningProc...
Publicado por Valeriano Tórtola | con no comments
Archivado en: ,,

File Splitter, partiendo y recomponiendo archivos

Este es un pequeño programa que he hecho para partir cualquier archivo en fragmentos más pequeños y poder volver a reconstruirlo después como apoyo a otra aplicación que estoy desarrollando. Aunque no tiene mucha parafernalia aún estoy asegurando que funciona bien, asi que si alguien lo quiere probar puede instalarlo desde este enlace: http://vtortola.net/FileSplitter/publish.htm (ClickOnce), cuando este requete-probaodo y haya arreglado el desastre de nomenclatura que hay en el código :D lo subo...
Publicado por Valeriano Tórtola | con no comments
Archivado en: ,,

Enviar a ... mi aplicación

Si desarrollamos una aplicación que manipule archivos puede ser útil disponer en el menu contextual "Enviar a" (SendTo) un enlace que permita enviar los archivos seleccionados directamente a nuestra aplicación trabajar con ellos. Esta es la típica cosita facilona y que lleva 5 minutos pero que resulta extremandamente útil cuando lo que desarrollamos es una herramienta de uso cotidiano. Los elementos SendTo se encuentran en la carpeta %homepath/SendTo% de cada usuario, pero explicaré como...
Publicado por Valeriano Tórtola | 1 comment(s)
Archivado en: ,,

Servicios Windows con dependencias

Imagina que tu servicio necesita de otro servicio para cumplir su función, supongamos que el servicio 'a' necesita del servicio 'b'. Si yo reinicio 'b' ... 'a' es posible que pierda la conexión ... aparezcan errores ... e incluso pudiese darse el caso de quedar funcionando pero inconsistente, otro problema es que puede ser que al arrancar la máquina 'a' arranque más rápido e intente conectar a 'b' de forma infructuosa ... con las consecuencias que ello...
Publicado por Valeriano Tórtola | con no comments
Archivado en: ,

Cifrando Strings con un password

Puede ser... que el cifrado del archivo de configuración de tu aplicación no se adecue a la solución que buscas... puede ser... que necesites cifrar cadenas concretas en un archivo... en una base de datos... mandar eMails cifrados a tu novia/mujer/amante... lo que sea... Estas dos funciones, basadas en el ejemplo de este artículo con algunas modificaciones, cifran y descifran un String con el algoritmo simétrico Rijndael y con una palabra clave que se pasa como SecureString ( ¿Por qué? ). De esta...
Publicado por Valeriano Tórtola | con no comments
Archivado en: ,,

Servicios Windows instalables

Aquí va un pequeño How-to rápido de como se crea e instala un servicio Windows con .NET y Visual Studio 2005 dedicado a mi compañero Juanma Otero que a cambio me explicará como funcionan los EndPoints de SQL Server :D Cada vez que vayamos a crear un servicio Windows, podemos seguir estos pasos para crear lo que sería el contenedor y su capacidad de instalación, para luego más tranquilamente empezar a introducir la lógica y funcionalidad del negocio que le queramos dar. 1. Creando. Se utiliza un proyecto...
Publicado por Valeriano Tórtola | 2 comment(s)
Archivado en: ,,

Tratando con excepciones

Buff... cuanto tiempo desde mi último post, entre estudiar y la medio-gripe que arrastro desde hace unas semanas no tengo ganas tiempo de nada :P Un tema que siempre me ha parecido que se deja un poco olvidado a la hora de desarrollar una aplicación es el tema de las excepciones, su flujo, su registro y como afectan al diseño y modularidad de la aplicación. Una excepción, es un error en el flujo lógico ideal de nuestra aplicación causado por una condición inusual. Ante un error de este tipo, debemos...

La memoria en .NET, tipos de variables

Siguiendo con el el artículo anterior de la memoria en .NET donde explicaba como esta estructurada, sigo con las variables, que en .NET principalmente son de dos tipos: Tipos por valor: Tipo (alias) Bytes Rango Char (char) 2 Caracteres Bolean (bool) 4 True ó False IntPtr ? Puntero nativo DateTime (date) 8 1/1/0001 12:00:00 AM a 12/31/9999 11:59:59 PM SByte (sbyte) 1 -128 a 127 Byte (byte) 1 0 a 255 Int16 (short) 2 -32768 a 32767 Int32 (int) 4 -2147483648 a 2147483647 UInt32 (uint) 4 0 a 4294967295...
Publicado por Valeriano Tórtola | 1 comment(s)
Archivado en: ,

La memoria en .NET, Managed heap y Thread stack

Con este, quiero empezar una serie de pequeños artículos sobre como esta estructurada la memoria en .NET, sin profundizar en demasiados detalles... pero empezar por lo más simple y acabar hablando sobre temas de sincronización, atomicidad y volaticidad pasando por el GarbageCollector, intentando aportar una información que a mi parecer, todo desarrollador debería tener en mente a la hora de programar... y que se debe conocer en profundidad para desarrollar aplicaciones multithreading. Espero que...
Publicado por Valeriano Tórtola | 1 comment(s)
Archivado en: ,