Publicado Sculpture 2.1 Final

Enero 04, 2010 :: Posted by - Emilio Torrens :: Category - , ,

La gente de dawliasoft anuncio hace poco que publicaban la nueva versión de Sculpture, así que me la voy bajando a ver que tal …

Nuevas funcionalidades en esta reléase

  • Documentación completa en PDF
  • Soporte para Oracle
  • Herencia multinivel en NHibernate y Entity Framework
  • Soporta los mas comunes escenarios de concurrencia (All, Dirty, y Version) para NHibernate
  • Soporta vistas en MSSQL y MySQL

Puedes descargarla desde Aquí.

SoapHeader, SoapExtensions y Herencia

Diciembre 03, 2009 :: Posted by - Emilio Torrens :: Category - , , ,

Hace unos días Jordi escribió sobre las SoapExtensions y yo sobre las SoapHeaders, hoy le añadimos herencia y vemos como ahorrarnos bastante código y trabajo en una capa de servicios. :)

La idea es que todos los métodos de todos los servicios web de la aplicación se autentifiquen en el mismo sitio y no tener que poner el código de autentificación en cada método, además no queremos usar cookies ni mantenimiento de sesión.

Para esto usaremos una Cabecera Soap donde el cliente nos enviara Usuario y Contraseña, debemos crear la clase cabecera:

public class SoapHeaderCredentials : SoapHeader
{
    public string Password = "";
    public string UserName = "";
}

Cada servicio web tiene que tener una propiedad con la Cabecera, para ahorrarnos el escribirlo cada vez, creamos una clase que herede de WebService, que contenga la propiedad y heredamos los servicios web de esa clase:

public class MyWebService : System.Web.Services.WebService
{
    public SoapHeaderCredentials soapHeaderCredentials;
}

public class Service : MyWebService

Después creamos una Extensión Soap de autentificación (en este caso la llamamos AuthenticationExtension), Jordi ya explica aquí como crearlas así que solo pongo el código que nos interesa, que es donde buscamos la Cabecera Soap en el Método ProcessMessage:

case SoapMessageStage.AfterDeserialize:
{
    var o = from h in message.Headers.Cast<SoapHeader>()
            where h.GetType() == typeof(SoapHeaderCredentials)
            select h ;
    SoapHeaderCredentials soapHeaderCredentials =
        (SoapHeaderCredentials) o.First();
    AuthenticateUser(
        new Credentials()
        {
          UserName = soapHeaderCredentials.UserName,
          Password = soapHeaderCredentials.Password,
        }, 
      );
    break;
}

Después solo queda añadir los dos atributos [SoapHeader("soapHeaderCredentials")]  y [AuthenticationExtension()] a nuestros WebMethods, eso hará que los métodos tengan la cabecera de usuario y contraseña y que ejecuten el código de autentificación al recibir un mensaje:

[WebMethod]
[SoapHeader("soapHeaderCredentials")]
[AuthenticationExtension()]
public string HelloWorld()
{
    return "Hello World";
}

Y listo :)

Serializar y Deserializar nuestras clases

Noviembre 30, 2009 :: Posted by - Emilio Torrens :: Category - , ,

Es sencillo obtener una representación XML de nuestras clases con el método ToString, solo hemos de sobrescribirlo por este:

public override string ToString()
{
    XmlSerializer ser = new XmlSerializer(this.GetType());
    StringWriter sw = new StringWriter();

    ser.Serialize(sw, this);

    sw.Flush();
    sw.Close();
    return sw.ToString();
}

También podemos crearlas desde su representación XML:

public static MyClass CreateFromXml(string xml)
{
    XmlSerializer ser = new XmlSerializer(typeof(MyClass));
    StringWriter sw = new StringWriter();

    return (MyClass) ser.Deserialize(new StringReader(xml));
}

Todo el Código de ejemplo:

public class MyClass
{
    public string Data1 { get; set; }
    public string Data2 { get; set; }

    public static MyClass CreateFromXml(string xml)
    {
        XmlSerializer ser = new XmlSerializer(typeof(MyClass));
        StringWriter sw = new StringWriter();

        return (MyClass) ser.Deserialize(new StringReader(xml));
    }

    public override string ToString()
    {
        XmlSerializer ser = new XmlSerializer(this.GetType());
        StringWriter sw = new StringWriter();

        ser.Serialize(sw, this);

        sw.Flush();
        sw.Close();
        return sw.ToString();
    }

    public void Test()
    {
        MyClass c = new MyClass();
        c.Data1 = "Hola";
        c.Data2 = "Como Estas";

        string xMyClass = c.ToString();

        MyClass copy = MyClass.CreateFromXml(xMyClass);
    }
}

Nos puede ser muy útil para temas de log, guardar los datos en las desconexiones, para debugear o para transportar la clases en XML entre aplicaciones.

Cabeceras en mensajes SOAP

Noviembre 27, 2009 :: Posted by - Emilio Torrens :: Category - , ,

Añadir cabeceras personalizadas a los mensajes de nuestros servicios web es realmente sencillo, en esas cabeceras podemos transportar cualquier dato que nos interese tokens, usuario y contraseña, lo que sea..

Hay que hacer lo siguiente:

1- Crear la clase con los datos que herede de SoapHeader

public class SoapHeaderData: SoapHeader
{
    public string Data1;
    public string Data2;
    public string Data3;
}

2- Crear una propiedad en el servicio web con esa clase y la etiqueta SoapHeader con el nombre de la propiedad al método web, en esa propiedad tendremos los datos

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    public SoapHeaderData HeaderData;

    [WebMethod]
    [SoapHeader("HeaderData")]
    public string HelloWorld() {
        return "Hello World " + HeaderData.Data1 + ", " +
                                HeaderData.Data2 + ", " +
                                HeaderData.Data3;
    }
}

Solo haciendo esto ya tenemos la cabecera en nuestra petición SOAP:

image

Visual Studio 2010 y .NET Framework 4

Octubre 30, 2009 :: Posted by - Emilio Torrens :: Category - , , , ,

VS2010_UI

Cada vez queda menos para que tengamos disponible la nueva versión de VS, junto con .NET Framework 4.0, C# 4.0, ASP.NET 4.0 etc, así que lo mejor es irse preparando, por ese motivo la gente de Microsoft lanza los “Kits de Entrenamientoâ€.

 Aquí podéis encontrar el ultimo, de Octubre, en el encontraremos, presentaciones, demos y ejemplos de:

C# 4.0, Visual Basic 10, F#, Parallel Extensions, Windows Communication Foundation, Windows Workflow,Windows Presentation Foundation, ASP.NET 4, Windows 7, Entity Framework,ADO.NET Data Services, Managed Extensibility Framework y Visual Studio Team System.

Así que no falta de nada :)

Programación Paralela con Axum

Mayo 12, 2009 :: Posted by - Emilio Torrens :: Category - , ,

Axum es un pre proyecto de Microsoft orientado a la programación paralela.

Axum

En el sitio web del proyecto puedes descargarlo (necesita Visual Studio 2008), además de la documentación encontraras un video de como empezar y algo de feedback de otros usuarios. El equipo de programación tiene un blog en el que encontraras algo de información extra.

Esta bien pegarle un vistazo, pero no creo que convenga liarse mucho ya que no es seguro que llegue a ver la luz como producto.

Disponible código fuente de .Net Framework

Enero 17, 2008 :: Posted by - Emilio Torrens :: Category - ,

Ya esta disponible el código fuente del framework desde Visual Studio 2008.

Las librerías disponibles de momento son:

  • .NET Base Class Libraries (System, System.CodeDom, System.Collections, System.ComponentModel, System.Diagnostics, System.Drawing, System.Globalization, System.IO, System.Net, System.Reflection, System.Runtime, System.Security, System.Text, System.Threading, etc).
  • ASP.NET (System.Web, System.Web.Extensions)
  • Windows Forms (System.Windows.Forms)
  • Windows Presentation Foundation (System.Windows)
  • ADO.NET y XML (System.Data y System.Xml)

Los pasos necesarios para poder ver y depurar el código del framework son:

1. Instalar esta actualización (atención a los usuarios de sistemas de 64 bits, es necesario un paso extra).

2. Dentro de Visual Studio 2008 ir a Herramientas, Opciones, Debugging, General y desactivar la opción Enable Just My Code y activar Enable Source Server

Optvs2008

3. Ir a Symbols y añadir esta URL: http://referencesource.microsoft.com/symbols y poner un directorio cualquiera en Cache symbols from symbol servers to this directory

Y listo.

 Symbnetfr

Microsoft .NET Framework 3.0 Service Pack 1

Diciembre 17, 2007 :: Posted by - Emilio Torrens :: Category -

Ya esta disponible el SP 1 para netfx3

Puedes bajarlo de aquí y ver la documentación aquí

Métodos Anónimos y SQLCLR

Noviembre 20, 2007 :: Posted by - Emilio Torrens :: Category - ,

Estaba escribiendo unos procedimientos almacenados SQLCLR, usaba algunos delegados para filtrar Listas y al intentar implementar la dll en el Servidor SQL obtenía, aunque el compilador no se quejaba de nada al generar, este error:

Error 2 Error de CREATE ASSEMBLY porque el tipo ‘StoredProcedures’ del ensamblado safe ‘NameSpace.MyClase’ tiene un campo estático ‘<>9__CachedAnonymousMethodDelegate1′. Los atributos de campos estáticos de ensamblados safe deben estar marcados como readonly en Visual C#, ReadOnly en Visual Basic o initonly en Visual C++ y el lenguaje intermedio. NameSpace.MyClase

La solución es marcar la Clase con el Atributo [System.Runtime.CompilerServices.CompilerGenerated]

[System.Runtime.CompilerServices.CompilerGenerated]
public partial class StoredProcedures
{
    [SqlProcedure]
    public static void MyProcedure(SqlChars XmlRQ)
    {}
}

Si tienes la clase marcada con ese atributo ya puedes usar delegados.

A partir de hoy esta disponible Visual Studio 2008 y .NET Framework 3.5

Noviembre 20, 2007 :: Posted by - Emilio Torrens :: Category - ,

Pues si, anunciado en el blog de Somasegar, a partir de hoy ya lo tenemos disponible !!!

Ya puse en otro post como podemos bajarlo