Ir al contenido principal

Entradas

[links] Links para descargas de Visual Studio 2008 SP1, Framework .NET 3.5, su SP1 y Sql Server Express 2008

En el proceso de modernizacion de los entornos de desarrollo que comunmente uso para trabajar, acumule estos links de descargas, que paso a compartir para ahorarle la busqueda a algun colega:

Microsoft .NET Framework 3.5 [web] 197.12 MB

Requerimientos:Windows Server 2003Windows Server 2008Windows VistaWindows XP256 MB de RAM500 MB de espacio disponible en disco



Microsoft .NET Framework 3.5 Service Pack 1 [web] 231.5 MB

Requerimientos:Windows Server 2003Windows Server 2008Windows VistaWindows XP256 MB de RAM500 MB de espacio disponible en disco



Windows Installer 4.5 Redistributable - Español [Windows Server 2003] [web] 3.2 MB

Requerimientos:Windows Server 2003 Service Pack 1Windows Server 2008Windows VistaWindows XP Service Pack 2



Microsoft Visual Studio 2008 Service Pack 1 (iso) [web] 913.79 MB

Requerimientos:Windows Server 2003Windows Server 2008Windows VistaWindows XP1024 MB de RAM



Microsoft SQL Server 2008 Express [web] 99.2 MB

Requerimientos:Windows Server 2003 Service Pack 2Windows Server …
Entradas recientes

Editando DTS de MS SQL 2000 en SQL Server 2005

Con MS-SQL 2005 y su consola de administración Microsoft SQL Server Management Studio, nuestros DTS, que tan bien funcionaban en MS-SQL 2000 y su consola, perdieron un poco de terreno.

Por diferentes razones, hasta que no llego una necesidad real de crear o editar DTS en SQL Management Studio, utilizábamos el cliente del SQL 2000 para ello. Bien, llego esa necesidad y vamos a instalar lo necesario para que con SQLMS pueda editarlos. Lo necesario, por ahora es solo esto:

Descargar este archivo para su versión en español o este para la versión en ingles.

La instalación, incluso con el Management Studio abierto y la lista de DTS visibles, es simple:
Doble click en el archivo descargado, un par se siguientes y un finalizar.

Desacoplamiento. Pruebas de desempeño.

Una de las claves de una arquitectura exitosa es el desacoplamiento que reina entre sus capas. Desde otra perspectiva: cuan flexible es nuestra aplicación a los cambios que impone el entorno. Un cambio imprevisto en las condiciones de negocio, o de plataforma, puede hacer que todo nuestro desarrollo sea obsoleto, si este no fue planificado correctamente.

El acceso a los datos puede venir bien, para dar un ejemplo de ello. De menor a mayor desacoplamiento:

Escribir un select directamente en el código nos obliga a volver a los fuentes ante un cambio simple en el "como" obtener o filtrar, los datos de una tabla. Podríamos dejar de lado esa practica y utilizar procedimientos almacenados (stored procedure). Conseguiríamos un poco mas de flexibilidad, pero seguimos lejos del desacoplamiento del que hablamos. Bien, saltemos un par de casilleros, y digamos que en el código llamamos a métodos estáticos de una clase helper, para realizar nuestra consulta, sin conocer siquiera el motor d…

Pruebas de desempeño - WCF - netTcpBinding

Para esta ultima prueba, modificamos la aplicacion principal para que funcione como cliente del servicio de suma, e incluimos dos nuevos proyectos. Uno de ellos para el host del servicio de suma basado en Windows Communication Foundation, y otro para el contrato (un assembly que solo contenga las interfaces publicas a utilizar).

Los cambios en la aplicacion principal son:

En el archivo de configuracion (app.config):



<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<bindingname="SinSeguridad">
<securitymode="None">
<messageclientCredentialType="None"/>
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpointaddress="net.tcp://localhost:8080/SumadorWCF/ServicioSuma"
binding="netTcpBinding"bindingConfiguration="SinSeguridad"
contract="SumadorWCF.Contratos.IServicio"name=…

Pruebas de desempeño - XML Webservices

En esta oportunidad, el desacoplamiento al que llegamos nos permite traspasar las barreras de la organizacion. Nuestro servicio de suma, ahora lo proporciona un Werbservices. Por lo tanto, podria estar fuera nuestra bateria de servidores, y la aplicacion funcionaria igual. Por lo menos en resultado, no en prestaciones.
Los cambios:

Agregamos en Web services al proyecto, con este codigo en el ASMX.



using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
publicclass Servicio : System.Web.Services.WebService
{

public Servicio(){}

[WebMethod]
publiclong sumar(long n)
{
return ++n;
}

}

Incluimos la referencia WEB a nuestro WS, y estos cambios en la aplicacion.



using System;
using System.Collections.Generic;
using System.Configuration; // Agregar referencia System.Configuration 2.0
using System.IO;
using System.Text;
using System.Th…

Pruebas de desempeño - En otro DLL sin referencia

Vamos dándole un poco mas de complejidad al simple ejemplo. En este caso, la DLL creada en el punto anterior, que incluía el método de suma, deja de estar referenciada en el proyecto principal (la aplicación de consola), y es cargada desde el código con las funciones que brinda el namespace Reflection.

Incluimos también el archivo app.config al proyecto principal:


<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
<appSettings>
<addkey="pathAssembly"value="D:\desarrollo\Proyectos\Testing\Perfomance\Binding\Sumador\bin\Release\Sumador.dll"/>
</appSettings>
</configuration>
En el incluimos el key pathAssembly con la ruta donde se encuentra el DLL que genera el proyecto donde radica el metodo suma.

Y modificamos el código para que cargue el tipo de dato desde el assembly directamente y pueda invocar el método suma.



using System;
using System.Collections.Generic;
using System.Configuration; // Agregar referencia System.Con…

Pruebas de desempeño - En otro DLL

Agregamos otro proyecto a la solución, del tipo libreria, en la que ubicaremos el servicio de suma.



using System;
using System.Collections.Generic;
using System.Text;

namespace Sumador
{
publicclass Servicio
{
publicstaticlong sumar(long n)
{
return ++n;
}
}
}


El código anterior modificado para esta prueba:



using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;

namespace Tester
{
class Program
{
privatestaticbool iterar = true;
staticvoid Main(string[] args)
{
int duracion = 1000;

Console.Write("Nombre de la prueba:");
string nombre = Console.ReadLine();

Console.WriteLine();
Console.WriteLine("Presione una tecla para iniciar la prueba");
Console.ReadKey();

Console.WriteLine("Finalizar prueba cada {0} milisegundos",duracion);


short i = 0;
using(StreamWriter sw = File.AppendText(string.Format("{0}.txt",nombre.Replace(' ','_')…

Pruebas de desempeño - Delegates anonimos

Y ahora, lo mismo pero con delegates anonimos. Sinceramente, no creo que exista diferencia con el segundo caso.



using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;

namespace Tester
{
class Program
{
privatestaticbool iterar = true;
privatedelegatelong MetodoSumar(long n);

staticvoid Main(string[] args)
{
int duracion = 1000;

Console.Write("Nombre de la prueba:");
string nombre = Console.ReadLine();

Console.WriteLine();
Console.WriteLine("Presione una tecla para iniciar la prueba");
Console.ReadKey();

Console.WriteLine("Finalizar prueba cada {0} milisegundos",duracion);


short i = 0;
using(StreamWriter sw = File.AppendText(string.Format("{0}.txt",nombre.Replace(' ','_'))))
{
while(i++ < 10)
{
ParameterizedThreadStart thsFinalizaStress = new ParameterizedThreadStart(Program.finalizarStressE…

Pruebas de desempeño - Delegates

Continuamos la serie de pruebas de desempeño. Modificamos nuestro codigo anterior, para realizar la invocacion utilizando delegates.



using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;

namespace Tester
{
class Program
{
privatestaticbool iterar = true;
privatedelegatelong MetodoSumar(long n);

staticvoid Main(string[] args)
{
int duracion = 1000;

Console.Write("Nombre de la prueba:");
string nombre = Console.ReadLine();

Console.WriteLine();
Console.WriteLine("Presione una tecla para iniciar la prueba");
Console.ReadKey();

Console.WriteLine("Finalizar prueba cada {0} milisegundos",duracion);


short i = 0;
using(StreamWriter sw = File.AppendText(string.Format("{0}.txt",nombre.Replace(' ','_'))))
{
while(i++ < 10)
{
ParameterizedThreadStart thsFinalizaStress = new ParameterizedThreadStart(Prog…

Pruebas de desempeño - 2da parte.

El ejemplo consta de invocar de manera secuencial y consecutivamente, durante un segundo, un servicio de suma. El valor final de la sumatoria, nos dara la cantidad de invocaciones logradas en dicho lapso. En esta primera prueba, el servicio estara en el mismo objeto, mediante un metodo estatico.



using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;

namespace Tester
{
class Program
{
privatestaticbool iterar = true;
staticvoid Main(string[] args)
{
int duracion = 1000;

Console.Write("Nombre de la prueba:");
string nombre = Console.ReadLine();

Console.WriteLine();
Console.WriteLine("Presione una tecla para iniciar la prueba");
Console.ReadKey();

Console.WriteLine("Finalizar prueba cada {0} milisegundos",duracion);


short i = 0;
using(StreamWriter sw = File.AppendText(string.Format("{0}.cvs",nombre.Replace(' ','_'))))
{
while(i++ < 10)