JASoft.org

¿ ASP.NET 3.5 ? ¿Windows Communication Foundation? Los terribles nombres de marketing de Microsoft

¿ ASP.NET 3.5 ? ¿Windows Communication Foundation? Los terribles nombres de marketing de Microsoft
Este es un tema que en realidad llevo comentando desde hace años con bastante gente del mundillo, y es que nos rompieron los esquemas ya cuando sacaron .NET 3.0 hace ya bastante tiempo. Y es que no estoy de acuerdo, al igual que mucha gente, con muchos de los nombres que usa y ha usado Microsoft para sus productos para desarrolladores. Por ejemplo: ASP.NET 3.5. ¿Por qué demonios le llaman así? Presumiblemente por que así coincide con la versión 3.5 de la plataforma, el cual también es discutible que sea un nombre correcto si bien está más cerca de la realidad. Pero lo cierto es que ASP.NET 3.5 no es más que ASP.NET 2.0 + AJAX + exactamente 3 controles nuevos. Sí VS2008 tiene muchas mejoras en los editores pero no tiene que ver con la versión de ASP.NET sino con el propio entorno renovado. Y todo esto confunde mucho a la gente y la desanima. Para empezar el que haya trabajado con la versión 2.0 y AJAX pensará que ahora tiene que aprender muchísimas cosas nuevas y que va cas... [Más]

Cómo convertir texto a formato título con un método extensor

Cómo convertir texto a formato título con un método extensor
La clase String posee sendos métodos para convertir todas las letras de un texto a mayúsculas o a minúsculas. Curiosamente no ofrece otros me´todos que también serían útiles como por ejemplo uno que he necesitado hoy: convertir el texto a formato título (es decir la primera letra de cada palabra en mayúsculas). Para este tipo de casos sería estupendo que la clase que nos interesa dispusiese de este método. Así, en mi ejemplo, lo que me gustaría es que la clase String tuviese un método ToTitle que convirtiera mis cadenas al formato apropiado para este caso. Pues gracias a la "magia" de los métodos extensores de C# 3.0 conseguirlo es muy fácil. Lo primero es crear un método que nos permita conseguir ese formato que queremos. Hay muchas formas de hacerlo. la más obvia es ir buscando espacios en la cadena y sustituir el siguiente caracter por el mismo en mayúsculas, pero es es algo muy ineficiente. La plataforma .NET nos da ya hecho esto gracias a la clase TextInfo de System.Globalizati... [Más]

Clon de RunAs.exe (II): petición segura de contraseña

Clon de RunAs.exe (II): petición segura de contraseña
En mi anterior post hablaba de cómo construir un programa "clon" de la utilidad de línea de comandos Windows RunAs. En esta primera parte vimos cómo se lanzaba un proceso suplantando a un usuario, que era el objetivo principal de la aplicación, si bien es la parte más fácil. La tarea que nos quedó pendiente de ver es la más complicada y consiste en solicitar al usuario la clave de manera segura, sin que llegue a estar almacenada en claro en la memoria siquiera. Para ello usamos la clase SecureString, que apareció para estos menesteres en la versión 2.0 del framework. Sin más vueltas vamos a ver directamente cómo se solicita dicha clave y pasamos a explicar los puntos de interés: private static SecureString PideClave(string nomUsuario) { Console.WriteLine("Escriba la contraseña para {0}:", nomUsuario); int top, left; ConsoleKeyInfo cki; SecureString clave = new SecureString(); top = Console.CursorTop;... [Más]

Clon de RunAs.exe: cómo suplantar a un usuario con .NET 2.0

Clon de RunAs.exe: cómo suplantar a un usuario con .NET 2.0
Esta es la primera parte de una serie de dos. El planteamiento es crear un programa que replique la funcionalidad básica de "RunAs", la utilidad de línea de comandos que permite ejecutar cualquier programa suplantando a otro usuario. Nuestro particular RunAs se encargará de solicitarnos de forma segura la clave para el usuario indicado y luego lanzará el .exe indicado suplantando al mismo y por lo tanto permitiéndonos hacer una escalada de privilegios o, por el contrario, ejecutar un programa con menos privilegios que el usuario actualmente autenticado en el sistema. Su uso básico es este: runas usuario ejecutable.exe o bien runas dominio\usuario ejecutable.exe si queremos indicar el dominio también. En este primer post voy a mostrar lo más sencillo que es lanzar el proceso suplantando a un usuario. Dejaré para el próximo la obtención de la clave del usuario y su almacenamiento seguro y pondré el código completo para descarga. El código principal del programa es el que muest... [Más]

Cómo averiguar si un usuario está actualmente "logueado" en el sistema

Cómo averiguar si un usuario está actualmente "logueado" en el sistema
Los sistemas Windows actuales son capaces de gestionar varias sesiones de trabajo simultáneas, para diferentes usuarios. Windows Xp o Vista sólo permiten una sesión interactiva al mismo tiempo pero es una simple cuestión de licencia, ya que en realidad internamente las gestionan de ese modo (de hecho existen programas en el mercado que desbloquean esta limitación). En Windows Server con terminal Services o en modo administrativo esto ya no es una limitación y se pueden tener tantas sesiones de usuario interactivas abiertas como soporte el hardware. Puede que a nuestro programa le venga bien saber en un momento dado si un determinado usuario está con una sesión iniciada o no. O incluso obtener una lista de usuarios que están actualmente en el sistema. La forma de conseguirlo es mediante una consulta WMI (Windows Management Instrumentation). En el siguiente fragmento se ve un método que, dado un nombre de dominio y un nombre de usuario comprueba si éste está "logueado" actualmente... [Más]

Como obtener los roles a los que pertenece un usuario: revisited

Como obtener los roles a los que pertenece un usuario: revisited
Hace ya un montón de tiempo (en septiembre de 2004), escribí un post, creo que interesante, sobre cómo obtener los roles a los que pertenecía un usuario de Windows. El caso es que entonces la única manera de conseguirlo era mediante reflexión saltarse las normas de acceso a miembros para llamar a un método interno de la clase WindowsIdentity que devolvía esa información. El caso es que desde entonces no lo había vuelto a revisar (ni falta que me hizo), pero hoy uno de los alumnos de nuestro curso 70-536 de fundamentos de desarrollo en .NET para certificación, me ha hecho notar que en -NEt 2.0 y superiores ya no funciona, y además me ha sugerido la forma de hacerlo con las nuevas versiones (muchas gracias Miguel Ángel, vero que el curso te está cundiendo mucho, jeje), que sería así:        private static string[] ListaDeRolesNET2(WindowsIdentity wId)         {        &nb... [Más]

Problema: Campos calculados de un DataTable, la función IIF y division por cero

Problema: Campos calculados de un DataTable, la función IIF y division por cero
Este asunto es de los que te pueden tener una mañana entretinido como un bobo mientras intentas averiguar qué #%$# está pasando... Hoy estuve tocando una aplicación vieja escrita en .NET 1.1. El caso es que el programador había metido una campo calculado en un DataTable que incluía una división, así: tabla.Columns.Add( new DataColumn( "Rentabilidad", typeof(decimal), "Beneficio / Ingresos"); El problemilla es que algunos registros tienen los ingresos a cero, por lo que en cuanto creabas el campo se obtenía una divisón por cero, claro. Lo primero que se te ocurre hacer (parte de meterlo en la consulta de la base de datos, que es lo primero que este programador debería haber hecho) es lo siguiente: tabla.Columns.Add( new DataColumn( "Rentabilidad", typeof(decimal), "IIF(Ingresos = 0, 0, Beneficio / Ingresos)"); Es decir, que si los ingresos son diferentes a cero que haga la divisón, si no que no la haga. Vale, el problema es que simplemente esto no funciona y sigues obteniendo todo... [Más]

Detectar si hay conectividad en el equipo (Métodos 4 y 5) (fin)

Detectar si hay conectividad en el equipo (Métodos 4 y 5) (fin)
Pues nada, ya toca acabar con esta miniserie de posts sobre lo de detección de conectividad. Los métodos cuatro y cinco realmente ya los he tratado en este blog en el pasado y es que ambos están relacionados con caracerísticas que aparecieron en la versión 2.0 de .NET, y los metí cuando estaba hablando de esas novedades hace mucho tiempo. El primero es el típico 'ping' a un servidor. Haciendo ping y detectando las respuestas al eco podremos saber claro está si hay o no conectividad (salvo que el cortafuegos nos impida recibir estos ecos de respuesta). El artículo en cuestión donde lo explicaba es del 7 de Julio de 2005 (ya voy viejo, jeje): Nuevo espacio de nombres NetworkInformation - Ejemplo de Ping. El segundo método de hoy también lo traté en Julio de 2005 (unos días después, el 16) y pasa por el uso de la clase NetworkInformation, que ya trae de serie muchas cosas interesantes, y no sólo para detectar la conectividad en primera instancia. El artículo completo está aquí: Cómo de... [Más]

Detectar si hay conectividad en el equipo (Método 3)

Detectar si hay conectividad en el equipo (Método 3)
Siguiendo con esta serie vamos a ver el tercer método para conseguir detectar conectividad. Este es un poco rebuscado, y para ser franco no se me ocurrió a mi ni tampoco recuerdo ahora mismo en dónde lo aprendí o quién me lo contó :-( Pero bueno, ahí va... Este pasa por comprobar si hay resolución DNS, y parte de la base (deduzco) de que el equipo local no es un servidor DNS, claro. Entonces lo que se hace es comprobar si se puede hacer la resolución de la IP del equipo actual, ya que si hay conectividad se puede consultar el servidor DNS. El código sería el siguiente:    public static bool IsConnected3     {         get         {             try             {             &nb... [Más]

Detectar si hay conectividad en el equipo (Método 2)

Detectar si hay conectividad en el equipo (Método 2)
En mi post anterior sobre este tema hablé de un primer método de detección basado en la APi de Windows. Hoy me toca hablar de otro similar, si bien usando una API completamente diferente. Los restantes métodos que veremos no necesitan ya el uso de la API. En esta ocasión usaremos la API del servicio de notificación de eventos del sistema, o sea, la System Event Notification Service (SENS) API. En concreto haremos uso de la función IsNetworkAlive, que se define así: [DllImport("sensapi.dll")]private static extern bool IsNetworkAlive(ref uint flags); Este método devuelve verdadero o falso en función de si hay o no conexión a la red. ¡Ojo!, a la red, no necesariamente a Internet, pero en muchas ocasiones lo que querremos es eso (si trabajamos sólo en una red local). Así, podemos definir nuestra propiedad IsConnected con esta función así: public static bool IsConnected2 {     get     {        &n... [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