JASoft.org

Nada se crea ni se destruye, sólo se transforma... Excepto las cadenas en .NET

Nada se crea ni se destruye, sólo se transforma... Excepto las cadenas en .NET
La máxima que encabeza este artículo es bien conocida en la naturaleza. Lo que ocurre es que en .NET hay algunas clases que parece que actúen contra-natura. Bromas aparte me gustaría hacer mención aquí a un comportamiento de las cadenas de texto en .NET que, si bien bastante lógico, puede que despiste a más de uno si no se lo han hecho notar nunca. Consideremos el siguiente código, tan sencillo: MiClase c1 = new MiClase();MiClase c2 = c1; Cuando en .NET hacemos esto la variable 'c2' contendrá una referencia a 'c1'. Si ahora, por el motivo que sea, transformamos los datos encapsulados en el objeto 'c1' o incluso si cambiamos el objeto al que referencia esta variable, 'c2' seguirá siendo idéntica a 'c1', es decir seguirá referenciando el mismo objeto al que referencie a su vez 'c1'. Sin embargo hagamos algo similar con una cadena de texto: string s1 = "Hola Pepe";string s2 = s1;s1 = s1.Replace("Pepe", "Paco");Console.WriteLine(s1);Console.WriteLine(s2);Console.ReadLine(); Según... [Más]

Cómo obtener los roles a los que pertenece un usuario

Cómo obtener los roles a los que pertenece un usuario
El otro día estaba jugueteando con la seguridad de una aplicación Windows escrita en .NET, utilizando las clases WindowsPrincipal y WindowsIdentity para probar algunas cosas. El caso es que me parece estupendo que WindowsPrincipal disponga de un método IsInRole que nos permite saber si el usuario que representa se encuentra dentro de un grupo de usuarios o no. Sin embargo me parece un error que no ofrezca propiedad o método alguno para obtener directamente la lista de todos los grupos/roles a los que pertenece el usuario. Creo que sería mucho más cómodo en algunas situaciones, sobre todo cuando no sabemos de antemano qué roles hay disponibles. Investigando un poco el asunto y utilizando un explorador de clases/decompilador .NET (Anakrino, en concreto) me di cuenta de que la clase WindowsIdentity dispone de un método privado llamado _GetRoles (sí, con guión bajo delante) al que se le debe pasar el token de un usuario y que devuelve una matriz de cadenas de texto. Tiene toda la pinta de... [Más]

MSDN 2: beta de la nueva documentación On-Line de la plataforma .NET 2.0

MSDN 2: beta de la nueva documentación On-Line de la plataforma .NET 2.0
Hoy me he enterado de que está accesible al público (aunque no publicitada) la versión Beta de la nueva documentación en-línea de la plataforma .NET 2.0. Se trata de la documentación y referencia de "Whidbey", o sea, de .NET 2.0, pero tiene una característica muy interesante: basta con escribir "http://msdn2.microsoft.com/library/<namespace>.aspx"  para que aparezca la documentación del espacio de nombres indicado. Así, por ejemplo, puedes escribir "http://msdn2.microsoft.com/library/System.Configuration.aspx"  para que aparezca la documentación de las clases de configuración de la plataforma. Puedes seguir profundizando e incluir a continuación nombres de clases concretas e incluso nombres de métodos. Por ejemplo, si pones http://msdn2.microsoft.com/library/System.Security.Cryptography.MD5.Create.aspx obtendrás la documentación (aún en pañales) del método 'Create' de la clase 'MD5' para cálculo de huellas digitales con este algoritmo. Ni que decir tiene la utilidad de algo as... [Más]

Más detalles acerca de los estilos visuales de Windows XP

Más detalles acerca de los estilos visuales de Windows XP
En mi "post" del día 31 de agosto (Cómo utilizar los estilos visuales de Windows XP) explicaba cómo habilitar los estilos visuales de Windows XP en aplicaciones Windows Forms con la versión 1.1 de la plataforma .NET. Por los comentarios que he recibido estos últimos días deduzco que vendría bien dar algunos consejos más.En concreto me han planteado las siguientes dudas: 1.- ¿Tengo que tener todos los controles con FlatStyle = System? Sí. Es necesario o sino no se verán con el estilo de Windows XP. Así que no queda más remedio que fijar esta propiedad en todos los controles que dispongan de ella. 2.- Menudo aburrimiento recorrer uno por uno los controles para fijar esta propiedad... ¿Puedo hacer otra cosa? Sí, puedes automatizar esta tarea. Me he tomado la libertad de escribir una pequeña rutina que hará precisamente esto. La he escrito en Visual Basic por probarla en un proyecto que estamos haciendo ahora en la empresa y que es en este lenguaje, pero traducirla a C# no reviste difi... [Más]

TOAD para SQL: Una herramienta útil para MSDE

TOAD para SQL: Una herramienta útil para MSDE
MSDE es la alternativa gratuita a SQL Server ya que ofrece toda la funcionalidad de éste pero, eso sí, limitada en cuanto a tamaño de las bases de datos y número de usuarios simultáneos. En fin, a estas alturas de la vida creo que no vale la pena abundar más sobre ella ya que es de sobra conocida (por si acaso hay algún despistado puede echar un vistazo aquí: http://www.microsoft.com/sql/msde/). El caso es que entre otras limitaciones de MSDE está la de que no incluye herramientas gráficas de gestión de las bases de datos, por lo que hay que utilizar alternativas (gratuitas o no) o bien las herramientas cliente de SQL Server si disponemos de una licencia. Últimamente estoy trabajando mucho con Oracle (por necesidad, no por devoción) y para este gestor existe una herramienta para Windows llamada TOAD que es realmente impresionante y desde luego mucho más potente que las que vienen "de fábrica" con el producto. El caso es que Quest, la casa que fabrica esta utilidad, dispone también de... [Más]

Cómo utilizar los estilos visuales de Windows XP

Cómo utilizar los estilos visuales de Windows XP
Si diseñas aplicaciones de escritorio (Windows Forms) con .NET y te limitas a colocar controles sobre los formularios, al final obtendrás ventanas aburridas y con aspecto anticuado, ya que por defecto los estilos visuales de Windows XP no están soportados en éstos. Desde luego si la aplicación se va a ajecutar en Windows XP es una verdadera pena que no se aproveche de ese aspecto tan potente y actual que le dan los temas y estilos del sistema. Por ejemplo, la figura sigueinte muestra la diferencia abismal que existe entre una misma ventana cuando carece de los los estilos de XP o los está utilizando. Pulsa para aumentar En Visual Studio .NET 2002 era bastante tedioso conseguir esto ya que había que hacer, como con cualquier ejecutable, un archivo manifest que se debía copiar en la misma carpeta que el ejecutable de la aplicación. Sin embargo en Visual Studio .NET 2003 (o sea, en la versión 1.1 de la plataforma) es de lo más sencillo conseguirlo. Lo único que hay que hacer es poner ... [Más]

Servicios Web instantáneos y sin esfuerzo con Visual Basic 6 (y IV)

Servicios Web instantáneos y sin esfuerzo con Visual Basic 6 (y IV)
En las tres anteriores entregas de esta serie sobre SOAP con herramientas clásicas hemos visto cómo crear y consumir servicios Web con Visual Basic y código de Script. Consulta el histórico del Blog para leer estos artículos. Los componentes que hemos creado y consumido hasta ahora eran objetos sin estado. Esto es, si disponemos de una DLL escrita en VB que contiene una clase que debe mantener información entre llamadas no funcionará correctamente ya que cada llamada realziada a través de SOAP es independiente de las demás y se realiza sobre un objeto diferente en el servidor. Por ejemplo, consideremos la siguiente clase 'PruebaSOAP2.Persona' que dispone de dos métodos: uno para anotar e nombre de una persona y el otro para saludarla: Private mNombre As StringPublic Sub AnotaNombre(sNombre As String) mNombre = sNombreEnd SubPublic Function DimeNombre() As String DimeNombre = mNombreEnd Function El método 'AnotaNombre' de esta clase almacena la cadena que se le pase como paráme... [Más]

Servicios Web instantáneos y sin esfuerzo con Visual Basic 6 (Parte III)

Servicios Web instantáneos y sin esfuerzo con Visual Basic 6 (Parte III)
En las entregas anteriores de esta mini-serie vimos cómo crear un servicio Web con Visual Basic 6 sin necesidad de hacer nada especial, sólo crear una DLL normal y corriente. Una vez suplida esta necesidad todavía nos queda otra: poder consumir servicios Web en Windows sin necesidad de programar en .NET. Sorprendentemente se trata de un tarea muy sencilla, si bien tiene sus limitaciones al intentar usarlo con servicios Web complejos que constan de varios componentes o espacios de nombres. La técnica consiste en el uso de la conocida función GetObject, si bien usando una sintaxis algo especial. Este función está disponible en Visual Basic, VBScript, Windows Scripting Host, etc… por lo que podemos hacer uso de ella universalmente. Por ejemplo, el siguiente código de WSH (guárdalo con cualquier nombre y extensión ‘.vbs’ o incluso úsalo desde una página HTML), utiliza el servicio Web de información horaria que creamos en la anterior entrega para devolver la hora en el servidor: ... [Más]

Servicios Web instantáneos y sin esfuerzo con Visual Basic 6 (Parte II)

Servicios Web instantáneos y sin esfuerzo con Visual Basic 6 (Parte II)
Ayer, con Visual Basic 6, construimos una clase muy sencilla con un método que se encargaba de devolver la hora del servidor. Nuestra intención es convertirla en un servicio Web para que pueda servir la hora a cualquier cliente SOAP. Y todo ello sin programar nada especial para conseguirlo. Ahora es en donde entra en juego la magia de COM+ y de .NET Remoting. Recuerda que debes tener instalado IIS sobre Windows XP o Windows 2003 Server. En las herramientas administrativas ejecuta la consola de administración de Servicios de componentes (o sea, COM+).  Crea una nueva aplicación COM+ y agrégale la DLL que acabas de compilar. En las propiedades de la aplicación COM+ vete a la pestaña Activación y marca la opción Usa SOAP. En el campo de texto inferior escribe el nombre que quieras darle al directorio de IIS en el que se publicará tu servicio Web, por ejemplo, HoraWS, como en la figura. Pulsa para ampliar Ya está. A partir de ahora tienes disponible un servicio Web en ese directo... [Más]

Servicios Web instantáneos y sin esfuerzo con Visual Basic 6 (Parte I)

Servicios Web instantáneos y sin esfuerzo con Visual Basic 6 (Parte I)
Parece que hoy en día no hay nada que esté más de moda que los servicios Web ¿verdad? Crear un servicio Web con la plataforma .NET es algo sencillo si no nos metemos en profundidades.Puedes leer al respecto una introducción a los servicios Web y un ejemplo de cómo crearlos en Visual Studio en mis artículos de los números 185 (¿Qué son los servicios Web?) y 186 (Implementación sencilla de servicios Web con Visual Studio .NET) de PC World (por desgracia no tengo enlaces a los que se pueda acceder gratuitamente). Los programadores de otros lenguajes más antiguos, como por ejemplo Visual Basic 6, parece que están fuera de onda automáticamente. En realidad se pueden crear servicios Web con Visual Basic 6 y otros lenguajes antiguos de Microsoft (hasta directamente en ASP, nosotros en Krasis lo hemos hecho) gracias al SOAP Toolkit  3.0 de Microsoft. De todos modos hay que programar bastante y, antes de nada, hay que leer bien y aprenderse la documentación que trae el Toolkit. ¿Qué te p... [Más]

Este soy yo y este es mi blog técnico, dedicado al software y a la programación.

¡Sígueme en Twitter!

Mis otros blogs

- JM Alarcón @ campusMVP.es
Contenido técnico en español orientado a desarrolladores
- JMAlarcon.es
Blog personal no técnico: sociedad, innovación, empresa...

Krasis

- campusMVP.es:
Los mejores cursos online de programación en español

- SELF LMS:
La plataforma de elearning más potente del mercado.

Histórico