Exprime la potencia asíncrona en IIS

Una aplicación ASP.NET sobre IIS escala muy bien y tiene muy buen resultado cuando hablamos de peticiones por segundo, pero la cosa puede mejorar cuando hablamos de conexiones concurrentes.

Teniendo en cuenta que cada vez más nuestras aplicaciones son asíncronas, está aumentando la cantidad de peticiones que nuestra aplicación tiene que soportar .

Por defecto ASP.NET 4.o acepta 5.000 peticiones concurrentes por CPU

Peticiones concurrentes por CPU:

Una aplicación ASP.NET en modo integrado bajo IIS7 nos permite configurar cómo administrar los subprocesos y como poner en cola las solicitudes cuando la aplicación está hospedada en un grupo de aplicaciones de IIS.

Los valores applicationPool se aplican a todos los grupos de aplicaciones que se ejecutan en una versión determinada de .NET Framework. La configuración está contenida en un archivo aspnet.config. Hay una versión de este archivo para las versiones 2.0 y 4 de .NET Framework. (Las versiones 3.0 y 3.5 de .NET Framework comparten el archivo aspnet.config con la versión 2.0.)

  • maxConcurrentRequestPerCPU: Especifica cuántas solicitudes simultáneas permite ASP.NET por CPU.
  • maxConcurrentThreadsPerCPU: Especifica cuántos subprocesos simultáneos se pueden estar ejecutando para un grupo de aplicaciones para cada CPU. Esto proporciona una manera alternativa de controlar la simultaneidad de ASP.NET, ya que puede limitar el número de subprocesos administrados que se pueden usar por CPU para atender las solicitudes. De forma predeterminada este valor es 0, lo que significa que ASP.NET no limita el número de subprocesos que se pueden crear por CPU, aunque el grupo de subprocesos de CLR también limita el número de subprocesos que se pueden crear.
  • requestQueueLimit: Especifica el número máximo de solicitudes que se pueden poner en cola para ASP.NET en un único proceso. Cuando dos o más aplicaciones ASP.NET se ejecutan en un único grupo de aplicaciones, el conjunto acumulativo de solicitudes que se realizan a cualquier aplicación del grupo de aplicaciones está sujeto a este valor. Sigue leyendo
Anuncios

Error en IIS BadImageFormatException

Subiendo una aplicación web al servidor me encontré con un error muy raro y que hasta el momento no me había pasado nunca.

Error System.BadImageFormatException !!!

La página del error en el IIS es:

error

La aplicación hasta ese momento estaba funcionando y después de añadirle un nuevo ensamblado  Masivos.Application.Interfaces dejó de funcionar. Lo curioso es que en el servidor de desarrollo funcionaba perfectamente, pero en el servidor de Pre no había manera que funcionara. Sigue leyendo

Actualizar-Generar certificado Web SSL en IIS 7

Estos días me a tocado renovar nuestro certificado SSL con el proveedor thawte y como no existe mucha información he decidido crear un mini tutorial explicando los pasos necesarios para realizar este mantenimiento. Para versiones anteriores del IIS podéis acceder a http://support.microsoft.com/kb/295281/es .

Para empezar aclararemos que con IIS7 es mucho más fácil renovar o generar el certificado, pero si no estas familiarizado con el panel de control es posible que te cueste un poco encontrar las opciones.

Comencemos:

1º Generar el fichero CSR

Tanto para generar un nuevo certificado como para renovarlo es probable que nos pidan un fichero para la solicitud de firma (.CSR) “dependiendo del proveedor”. Para esto tendremos que ir al panel de control de nuestro IIS. Seleccionar el servidor y en el apartado de seguridad seleccionar los certificados existentes.

Obtendremos la lista de certificados instalados en el servidor. Y seleccionamos la opción que necesitemos, en mi caso crear solicitud de certificado para generar el fichero CSR.

Rellenamos todos los campos:

  • Nombre común: “Muy Importante” Nombre del dominio completo o URL. Por ejemplo, un certificado SSL emitido por “www.tuEmpresa.com” no será válido para “secure.tuEmpresa.com”. Si la dirección Web que se utilizará para SSL es “secure.tuEmpresa.com,” garantizar que el nombre común presentada en la RSE es “secure.tuEmpresa.com”.  Para todos los subdominios puedes utilizar el * por ejemplo, “*. tuEmpresa.com” o “www *. tuEmpresa.com”.
  • Organización: Nombre de la empresa.
  • Unidad Organizativa: Departamento encargado del soporte por ejemplo “Departamento web”.
  • Ciudad o Localidad: Ciudad de contacto de la empresa.
  • Estado o Provincia: provincia de contacto de la empresa.
  • País o región: País de contacto de la empresa.

Seleccionar el proveedor de servicios criptográficos RSA 1024 bits y guardar el fichero con extensión CSR.

Se generará un fichero de este tipo “alterado ;-)”, que es el que se tiene que enviar a nuestro proveedor para generar la firma del certificado.

2º Instalar el Certificado en el servidor

Una vez que nuestro proveedor haya aceptado nuestro certificado web SSL ya lo podemos instalar en nuestro servidor web.

Nos pueden enviar el fichero o el texto del certificado, si es así tan sólo tenemos que generar un fichero de texto pegar el contenido y modificar la extensión por .CER para tener preparado el certificado para su instalación.

Volvemos al panel de control del IIS –> certificados –> completar solicitud de certificado.

Buscamos el fichero y lo añadimos a la lista de certificados del servidor.

3º Configurar nuestro sitio web HTTPS

Si estamos configurando un nuevo sitio tenemos que habilitar el protocolo HTTPS y si ya lo teníamos configurado solo tenemos que modificar el certificado que utilizamos en el sitio web.

Seleccionamos el protocolo HTTPS para modificar la configuración.

Seleccionamos el nuevo certificado SSL que utilizará el sitio web.

Certificado renovado o instalado con éxito !!!

Nuestro sitio web ya está utilizando el nuevo certificado SSL correctamente y ya no nos tenemos que preocupar hasta el año que viene ;-)

Espero que este mini tutorial os sea de ayuda.

Publicar Servicio WCF en un servidor compartido

Siguiendo con las ayuditas a mis rivales en el concurso Es la hora de los Puños , voy a exponer un error común que nos podemos encontrar al intentar publicar el servicio WCF en un servidor compartido, una configuración muy habitual en nuestros hostings.

El error:

Esta colección ya contiene una dirección con el esquema http. Sólo puede haber una dirección por esquema en esta colección.

image

El Problema:

El servidor web IIS solo permite una sola dirección base por esquema (HTTP) y eso para un entorno compartido es un verdadero problema, esto ya está solucionado en IIS 7.0 y framework 4.0 con el atributo multipleSiteBindingsEnabled en el elemento serviceHostingEnvironment.

Posible solución para versiones anteriores:

Para poder hospedar un servicio WCF con un extremo web en un servidor IIS hay que especificar  la clase WebServiceHostFactory en el archivo .svc

<ServiceHost Language="C#" Debug="true" Service="KillBits.Fight"
CodeBehind="Fight.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" >

O en el fichero de configuración estableciendo el binding webHttpBinding Sigue leyendo

¿ Servicios REST con diferente serialización Json ?

Resulta que estos días he estado jugando un poco con WCF y serialización JSON para participar en el nuevo concurso de MSDN http://www.lahoradelospunos.com

En resumen lo que hay que hacer es un Servicio REST accesible desde peticiones HTTP GET que devuelva la secuencia de movimientos conforme el siguiente esquema.

{
  "Alias": "My_alias",
  "Moves": "A1, A2, B1, A1, ME, A1, A2, B1, B2, B1",
  "Enemy": "Enemy_name"
}

Pero el problema viene cuando genero la página para acceder manualmente al servicio desde una página web propia y pretendo hacerlo compatible con las llamadas de cliente MS AJAX.

WCF accesible desde ASP.NET AJAX:

Para hacer accesible el servicio y poderlo consumir desde ASP.NET AJAX solo hay que especificar el parámetro Factory de la directiva @ServiceHost en el archivo .svc como WebScriptServiceHostFactory.

image

Desde ese momento la salida de mi objeto JSon tiene el siguiente formato:

{
  "d":
 {
   "__type":"Ataque:#KillBits",
   "Alias":"Marckys ",
   "Enemy":"Cliente",
   "Moves":"A2,A2,B1,A2,A2,A2,ME,A1,B1,A2"
 }
}

UPSSS!!! no tiene el mismo formato que me piden en el concurso. Sigue leyendo

Consultar un recurso Https con error en el certificado

Han habido varias consultas en el foro MSDN sobre como poder consultar un recurso web aunque el servidor que utiliza el protocolo https tenga el certificado caducado.

En esta entrada pondré un ejemplo muy simple que se puede utilizar para este menester.

Lo primero que he realizado es un proyecto web que utiliza una clase para enviar una petición xml, por ejemplo si quisiera consumir un servicio web XML en php que no dispone de una descripción pública del interfaz “WSD

La clase se llama Conector y utiliza un método estático que utiliza la clase HttpWebResponse para hacer la petición Http y devuelve el resultado obtenido de la petición como un string. Sigue leyendo

Donde está la pestaña de ASP.NET del IIS ???

Me encontraba yo instalando una aplicación Web ASP.NET 2.0 en Windows Server 2003 y al abrir el administrador del IIS no vi la pestaña de selección de la versión de ASP.NET. Lo primero que pensé fue que no tenía instalado el Microsoft Framework 2.0 o que tendría que reinstalarlo conAspnet_regiis.exepara que apareciera la tan querida pestaña.

Pero mi sorpresa aún fue mayor cuando descubrí que el servidor si tenía instalado el Framework 2.0, pero no solo eso, sino que también tenia la versión de 64bits, uff!!

Mi primera instalación en un servidor de 64 y ya comenzamos mal.

Después de navegar un poco por la red en busca de información sobre como solucionar mi problema vi soluciones muy rudimentarias como modificar el registro de Windows para trabajar con la versión correcta. Sigue leyendo