No se puede conectar con el servidor IIS Express


Es un problema recurrente a muchos desarrolladores de asp.net con visual studio 2020 ( o versiones anteriores : si intentamos iniciar nuestra aplicación .net core, recibimos este este mensaje “No se puede conectar con el servidor IIS Express” .

Es cierto que hay muchas publicaciones que afirman solucionar este problema, asi  que  pude que haya probado todos los métodos que sugieren y quizas ninguno funcione.

He aqui algunas de esas ideas

  • Si entramos en las propiedades del proyecto bajo depuración y cambiamos el puerto, entonces se conectará 1 vez. Entonces, si intentamos conectarnos de nuevo, nos dará el mismo error otra vez. Luego, puedo volver a cambiar el puerto al original y se cargará una vez, luego fallará más allá de eso, hasta que lo vuelva a cambiar. 
  • Las personas generalmente no tienen idea de cuáles son las configuraciones, por lo que no tienen una manera fácil de saber qué está pasando. Trate de usar Jexus Manager para ver qué pasa y luego la solución puede ser clara, jexusmanager.com/en/latest/tutorials/vs-diagnostics.html
  • Eliminar la carpeta oculta .vs en la carpeta raíz que puede que  resuelva el problema
  • No utilizar IISexpress, lo que puede  evite el problema.

Bien , si se analiza con calma el problema , es posible entender que el puerto que visual studio va a usar  para lanzar la aplicación web en el navegador  haya cambiado por alguna razón ( por ejemplo si ha copiado el directorio de la aplicación al completo) , y ese es el motivo por el  que debido a esa discordancias de los valores del puerto entre IIS y VS de ese error

¿Cómo lo resolvemos? pues siguiendo los mismos pasos que haríamos para   hacer accesible la aplicación desde una IP  y no desde localhost desde el propio equipo de desarrollo

Estos serian los pasos:

1. Averiguamos con qué dirección está visible nuestro equipo desde el exterior
Esto podemos hacerlo con cierta facilidad ejecutando el comando “ipconfig | find “IPv” ” en la terminal (cmd)  .

El número de resultados que veremos ahí dependerá de los adaptadores de red (físicos o virtuales) que tengamos configurados en nuestro equipo. De ellos tendremos que seleccionar la dirección que se encuentre en el rango de red usado por los equipos externos desde los cuales queremos acceder a nuestra web.

2. Localizamos el archivo de configuración de IIS Express del proyecto

Este archivo se llama “applicationhost.config” y en proyectos de Visual Studio se encuentra en una carpeta llamada “.vs\nombre de proyecto\config” que encontramos en el directorio  de la solución, en la subcarpeta del nombre del proyecto  y dentro de ella, en la subcarpeta “config”.

En otros casos, el archivo de configuración se puede  encontrar en la carpeta de configuración de IIS Express de vuestro usuario en el equipo: %userprofile%\documents\iisexpress\config.

3. Localizamos las líneas donde se especifica la URL por defecto del proyecto

En el archivo “applicationhost.config“, debemos localizar la parte de la configuración donde se indica la URL de acceso al proyecto en la máquina local. Por ejemplo, podría ser algo como esto:

<bindings>
<binding protocol=”http” bindingInformation=”*:53980:localhost” />
<binding protocol=”https” bindingInformation=”*:44342:localhost” />
</bindings>

 

Observe que este binding está limitando el acceso a vuestro sitio web, permitiendo únicamente el uso del host “localhost” para acceder al mismo. Para habilitar el acceso desde equipos externos, lo primero que tenemos que hacer es añadir otros bindings con el nombre de host que se utilizará desde fuera.

4. Añadimos a la configuración de IIS Express el nuevo binding con la dirección de nuestro equipo

En la sección de configuración <bindings>, añadimos una nueva línea en la que indicaremos que la aplicación también será accesible utilizando como host nuestra IP, de forma que quedaría más o menos como aparece a continuación.

 Ojo, ¡deberiamos elegir un puerto distinto al que usamos en localhost para que no haya conflictos !

Bien, pues si ahora intentamos ejecutar sin depuración sin permisos de administrador  nos aparecera el error de que no es posible iniciar IIS Express, pero no se preocupe pues este error aparece siempre que no hayamos lanzado Visual Studio como administrador, pues el nivel de permisos del proceso bajo el que se lanza IIS Express no es suficiente como para “apropiarse” de una dirección y puerto TCP/IP del equipo y utilizarla para escuchar peticiones.

En cambio, si iniciamos Visual Studio como administrador veremos que arranca correctamente y que, de hecho, podemos acceder a la aplicación utilizando tanto localhost:44342 como con permisos de administrador 192.168.1.46:44342, lo que quiere decir que, si no existen problemas de permisos, el binding está bien hecho.

 

5. Reservar la URL y conceder permisos de uso (sólo no administradores)

Como hemos comentado antes, este paso no será necesario si estamos ejecutando Visual Studio (y por tanto IIS Express) como administrador. Pero si no es así, debemos abrir una la línea de comandos con permisos elevados y utilizar la siguiente instrucción para reservar la URL y darle derechos de uso a determinados usuarios del equipo, por ejemplo como sigue desde la terminal de windows (cmd)  con permisos de administrador (no lo intente desde PowerShell porque le dara error) :

Pero antes de hacerlo tened en cuenta unos detalles:

  • Primero, la URL debe estar completa, incluida la barra del final.
  • El usuario puede ser cualquier grupo del sistema o nombre de usuario con dominio.
  • Los nombres de grupo son sensibles al idioma de instalación de Windows. Es decir, si vuestro Windows está instalado en inglés, debéis usar el nombre “everyone” en lugar de “todos”.

Tras ejecutar el comando, ya debería ser posible acceder a la aplicación desde el equipo utilizando tanto la URL interna (localhost) como la externa (192…), cada una con su puerto correspondiente.

Pero el acceso externo aún no está garantizado: el firewall impedirá el acceso a no ser que le indiquemos lo contrario.

6. Abrir el firewall

Por defecto, el firewall de Windows rechazará cualquier intento de acceso a la máquina desde el exterior, por lo que debemos configurar una regla de entrada que asegure que las peticiones hacia nuestra web podrán entrar sin que el firewall rechaze ese trafico.

Esto lo podemos hacer desde el interfaz grafico en configuración avanzada en reglas del Cortafuegos  o bien desde la  consola de comandos con permisos de administrador, ejecutando la siguiente orden :netsh advfirewall firewall add rule name=”Acceso externo a mi aplicacion web” dir=in action=allow protocol=TCP localport=44342

Por supuesto, recuerde que:

  • El parámetro localport debe ser el puerto que haya elegido para el acceso externo, el mismo que usamos en el archivo de configuración de IIS Express, y más adelante al reservar la URL.
  • Es conveniente poner un nombre reconocible a la regla, de forma que más adelante podamos identificarla con facilidad.

 

¡Y eso es todo! Si ha llegado hasta aquí, ya podrá ejecutar o depurar vuestra aplicación en Visual Studio, y acceder a ella desde cualquier equipo de la red local usando la dirección que hayas elegido en los pasos anteriores.

¿Que se puede hacer para mejorar el rendimiento de las consultas en Oracle 11?


Tradicionalmente para mejorar el rendimiento de las consultas en SQL contra una BBDD Oracle , una vez optimizada la consulta con técnicas  de Tuneling ( por ejemplo usando Hints si procede) ,   siempre pasamos a dos técnicas clásicas :

  • Reconstruyendo los  índices existente en base de datos ,para lo cual previamente comprobaremos si esos índices deberían de ser reconstruidos  
  • Actualizando estadísticas sobre las tablas que realizamos las consultas.

Veamos mas despacio de que estamos hablando: 

 

Reconstrucción de indices

El índice de una base de datos es una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rápido acceso a los registros de una tabla por lo que se suelen usar sobre aquellos campos sobre los cuales se vayan a realizar búsquedas frecuentes dado que su  funcionamiento es similar al índice de un libro: guardando duplas de elemento que se desea indexar junyo a su posición en la base de datos, de modo que para buscar un elemento que esté indexado, sólo necesitamos que buscar en el índice de dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posición marcada por el índice.

Los índices pueden ser creados usando una o más columnas, preparando la base de datos tanto para búsquedas rápidas al azar como para ordenaciones eficientes de los registros.

Los índices son construidos sobre árboles B, B+, B* o sobre una mezcla de ellos, funciones de cálculo u otros métodos.

El espacio en disco requerido para almacenar el índice es típicamente menor que el espacio de almacenamiento de la tabla (puesto que los índices generalmente contienen solamente los campos clave de acuerdo con los que la tabla será ordenada, y excluyen el resto de los detalles de la tabla), lo que da la posibilidad de almacenar en memoria los índices de tablas que no cabrían en ella. En una base de datos relacional un índice es una copia de parte de una tabla.

La siguiente consulta SQL mostrará el tamaño en megabytes de un índice determinado, en nuestro caso del índice PK_FACTURACION_CODIGO perteneciente a la tabla FACTURACION y el campo CODIGO del ejemplo. La consulta SQL para mostrar el tamaño ocupado por un índice es la siguiente:

select segment_name, sum(bytes)/1024/1024 MB
from dba_extents
where segment_name = ‘INDICE DE EJEMPLO’
group by segment_name

 

 

Es importante periódicamente examinar y determinar qué índices son susceptibles de ser reconstruidos. Cuando un índice está descompensado puede ser porque algunas partes de éste han sido accedidas con mayor frecuencia que otras dando como resultado problemas de contención de disco o cuellos de botella en el sistema.

Normalmente reconstruimos un índice con el comando ALTER INDEX  (esta sentencia se utiliza para cambiar o reconstruir un índice existente en la base de datos).

Para poder ejecutar este comando el índice debe de estar en el propio esquema donde intentes ejecutarlo o deberías de tener el privilegio alter any index. También tenemos que tener en cuenta que para realizar la reconstrucción de un índice deberíamos de tener cuota suficiente sobre el tablespace que lo lanzamos.

Para reconstruir un índice bastaría con lazar la siguiente sentencia

ALTER INDEX <index_name> REBUILD;

Para reconstruir una partición de un índice podríamos hacer lo siguiente

ALTER INDEX <index_name> REBUILD PARTITION <nb_partition> NOLOGGING;

Nota: En algunos casos cuando alguno de los índices tiene algún tipo de corrupción no es posible reconstruirlo. La solución en este caso es borrar el índice y recrearlo

 

 

 

Actualización de estadísticas

Cuando una base de datos Oracle recibe una sentencia “SQL” para resolver una consulta, se llevan a cabo diversas acciones para lograr la entrega del resultado.

Dentro de los diversos pasos uno de los más importantes es el llevado a cabo por el optimizador basado en costos “Cost Based Optimizer o CBO”. Para que el “CBO” pueda determinar de forma exacta el plan de ejecución de para un “SQL Query” debe disponer de la información de las estadísticas de las tablas e índices que participan en el “SQL Query”, esta información comúnmente es conocida como “Optimizer statistics” “Estadisticas del optimizador”, la misma describe como esta compuesto y distribuido internamente el objeto.

Estas estadísticas son utilizadas por el optimizador para elegir el mejor plan de ejecución para cada instrucción SQL.

El tiempo necesario para colectar las estadísticas en algunos casos puede ser de gran medida. En el manejador se pueden utilizar diversos métodos para tratar de reducir el tiempo de esta tarea en la mayor proporción posible.

 

Es importante tener por tanto actualizadas las estadísticas de la base de datos. Para saber si las estadísticas se están lanzando correctamente podemos hacer una consulta sobre la tabla ALL_INDEXES en oracle 11  (en Oracle 10  es  dba_indexes )y ver el campo last_analyzed para observar cuando se ejecutaron sobre ese índice las estadísticas.

Nota: la columna “LAST_ANALYZED” la cual puede ser encontrada en vistas tales como: “DBA_TABLES”, “DBA_INDEXES”, “DBA_TAB_COL_STATISTICS” indica la fecha en que fue calculada la estadística para dicho objeto por ultima vez.

 

Como ejemplo  , si queremos  saber cuando fue la ultima vez que se ejecutaron estadísticas sobre todas las tablas perteneciente a un determinado esquema de BBDD  lanzaremos la siguiente consulta:

SELECT LAST_ANALYZED,table_name FROM ALL_INDEXES ;

 

 

Como vemos con las fechas podemos  hacernos una idea , de lo actualizado que están las estadisticas   sobre cada tabla   

Para actualizar las estadísticas de forma global para  un  esquema de BBDD,  podemos utilizar  el paquete DBM_STATS  de la la siguiente forma:

Execute DBMS_STATS.gather_schema_stats(‘Esquema’);

 

Una vez actualizadas las estadísticas de los índices de la base de datos lanzamos la siguiente consulta:

SELECT LAST_ANALYZED,table_name FROM ALL_INDEXES ;
SELECT index_name, blevel,
DECODE(blevel,0,'OK BLEVEL',1,'OK BLEVEL',2,
'OK BLEVEL',3,'OK BLEVEL',4,'OK BLEVEL','BLEVEL HIGH') OK
FROM dba_indexes where table_owner='DBPROD08';

 

Con esta sentencia obtendremos el nombre nombre del índice, el blevel y si es correcto este indice.

Los índices que deberíamos de reconstruir son los que en la columna ok aparecen como BLEVEL HIGH.

Blevel (branch level) es parte del formato del B-tree del índice e indica el número de veces que ORACLE ha tenido que reducir la búsqueda en ese índice. Si este valor está por encima de 4 el índice debería de ser reconstruido.

.

OctoPrint sobre Windows


OctoPrint es un sofware creado por Gina Häußge y es 100% opensource  con un  interfaz amigable que hace de servidor  de impresion 3D  permitiendo controlar en la practica cualquier impresora 3D a distancia.

Gracias a este sw  podríamos dejar nuestra impresora imprimiendo durante horas mientras la controlamos desde cualquier parte del mundo ( se puede empezar, parar y pausar impresiones en tiempo real) o la monitorizamos gracias a que podemos conectarle una webcam y hacer streaming de las impresiones e incluso timelapses.

Otras utilidad  sin duda  interesante es subir o visualizar nuestros GCODES e incluso generarlos !las posibildades son  casi infinitas!.

Este sw esta  en constante desarrollo y mantiene una gran comunidad en Github que comparte e innova en sus nuevas implementaciones de acorde a las necesidade de cada usuario,

La forma más sencilla de instalar OctoPrint es usando un mini PC : orangePi como vimos en este port,  Raspberry Pi, etc   pero también es  posible instalarlo en cualquier ordenador  con windows  como vamos   a ver en este post:

 

 

Instalar Python, Git y OctoPrint

Para instalar OctoPrint desde el origen en Windows, necesitará hacer lo siguiente::

  1. Instalar Python 2.7 de 32bit (seleccione el paquete “Windows x86 MSI Installer “). Asegúrate de incluir PIP en la instalación y también de que el instalador añada Python a tu ruta.)desde aqui  Es importante seleccionar el fichero correspondiente al sistema operativos que tengamos instalado (aunque la arquitectura del pc sea otra.                                       python                                    Ejecutaremos el fichero msi  y como venos nos aseguraremos que se añade al  path ejecutable de Python   Python installation dialog
  2. Instalar Microsoft Visual C++ Compiler para Python 2.7 desde aquisurface pro
  3. Abrir interfaz de comandod  (Win+R   y ejecutar  cmd) e instalar  virtualenv usandopip install virtualenv:
    pip install virtualenv
    

    Verá algo como lo siguiente (prompt y salida  incluida, no copiar-pegar esto!):

    C:\Users\YourUser>pip install virtualenv
    You are using pip version 7.0.1, however version 7.1.2 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    Collecting virtualenv
       Using cached virtualenv-13.1.2-py2.py3-none-any.whl
    Installing collected packages: virtualenv
    Successfully installed virtualenv-13.1.2
    

    Si usted recibe un mensaje sobre PIP de no haber sido encontrado, su path aún no ha sido actualizado para incluirlo. Hágalo manualmente por ahora en el indicador activo redefiniendo  PATH:

    PATH=%PATH%;C:\Python27\Scripts
    

    ¡ No cierre la ventana con el prompt, manténgalo abierto!

  4. Instalar Git for Windows. :Git installation dialog                      Asegúrese de seleccionar “usar git desde el símbolo del sistema de Windows ” cuando le pide que decida cómo desea utilizar git desde la línea de comandos
  5. Abra un interfaz de comandos  (cmd) y cambiar a la ubicación en la que desea que se resida la carpeta de OctoPrint. Para este pot estamos asumiendo que esto sea C:\  Chequear  las fuentes de OctoPrint  Via git clone https://github.com/foosel/OctoPrint . Esto creará una nueva carpeta C:OctoPrint con las fuentes de OctoPrint que residen en él.
  6. cd C:\
    git clone https://github.com/foosel/OctoPrint
    

    Debe  verse como esta  (prompt y salida incluida, no copiar-pegar esto!):

    C:\Users\SomeUser> cd C:\
    C:\> git clone https://github.com/foosel/OctoPrint
    Cloning into 'OctoPrint'...
    [...]
    Checking out files: 100% (563/563), done.
    
    C:\>
    
  7. Aún en el símbolo del sistema, cambie a la carpeta de origen de OctoPrint  (cd C:\OctoPrint) y crear   un nuevo virtualenv: virtualenv venv. Activelos: venv\Scripts\activate.batNota: Si no ha registrado los orígenes de OctoPrint en C:OctoPrint, debe cambiar el comando de CD que se encuentra a continuación, asegúrese de que está en la carpeta correcta antes de ejecutar el virtualenv y activar. bat o no funcionará.
    cd C:\OctoPrint
    virtualenv venv
    venv\Scripts\activate.bat
    

    Debe  verse como esta  (prompt y salida incluida, no copiar-pegar esto!):

    C:\>cd OctoPrint
    C:\OctoPrint>virtualenv venv
    New python executable in venv\Scripts\python.exe
    Installing setuptools, pip, wheel...done.
    
    C:\OctoPrint>venv\Scripts\activate.bat
    (venv) C:\OctoPrint>
    

    Nota: en este punto podría ser una buena idea para asegurarse de que tiene la versión más actualizada de PIP instalado en su venv, así que mejor actualizar que ahora:

    pip install --upgrade pip
    

  8. Realizar   una isntalacion de  python setup.py install (o si tiene intención de hacer cambios,  python setup.py develop):
    python setup.py install
    

    Debe  verse como esta  (prompt y salida incluida, no copiar-pegar esto!):

    (venv) C:\OctoPrint>python setup.py install
    running install
    [...]
    Finished processing dependencies for OctoPrint==1.3.2
    
  9. Inicie OctoPrint simplemente ejecutando octoprint serve:
    (venv) C:\OctoPrint>octoprint serve
    2017-03-20 10:56:22,329 - octoprint.server - INFO - ******************************************************************************
    2017-03-20 10:56:22,332 - octoprint.server - INFO - Starting OctoPrint 1.3.2 (master branch)
    2017-03-20 10:56:22,332 - octoprint.server - INFO - ******************************************************************************
    [...]
    

    Nota: en este punto, Windows probablemente le preguntará si desea permitir que OctoPrint sea accesible desde su red. Las probabilidades son altas que usted desea esto, así que permita el acceso de redes de confianza por lo menos.


  10. Abra una nueva pestaña o ventana en su navegador e ingrese http://localhost:5000. Ahora debería estar mirando su interfaz web OctoPrint. Si desea acceder a él desde otro equipo de la red local, sustituya  localhost por la IP de su  PC  http://192.168.1.3:5000.

Felicitaciones, ahora tiene una configuración de OctoPrint de ejecución!

Para iniciar el servidor OctoPrint, abra un símbolo del sistema y ejecute  C:\OctoPrint\venv\Scripts\octoprint.exe serve.Si desea detener OctoPrint, pulse Ctrl + C en la ventana del símbolo del sistema o simplemente cierre.

Crear un acceso directo

Para facilitar el inicio de su servidor OctoPrint en el futuro, puede que desee crear un acceso directo en su escritorio o en algún otro lugar que pueda encontrar de nuevo, apuntando a C:\OctoPrint\venv\Scripts\octoprint.exe serve:

Creating a shortcut for starting the server

Configurar OctoPrint para poderse actualizar automáticamente

Si desea que OctoPrint pueda actualizarse, necesitará configurar la carpeta que ha retirado OctoPrint en OctoPrint configuración de software, haciendo clic en el icono de la pequeña llave en la esquina superior derecha y estableciendo “OctoPrint Checkout Folder ” a C:\OctoPrint:

Software Update configuration in OctoPrint's settings

Alternativamente, también puede realizar esta configuración mediante el archivo de configuración de OctoPrint  config.yaml en %APPDATA%/OctoPrint:

plugins:
  softwareupdate:
    checks:
      octoprint:
        checkout_folder: C:\OctoPrint

Instalar un servidor de webcam y configurar OctoPrint para ello

Puede usar algo como e YawCAM f para una funcionalidad similar a MJPEG-Streamer bajo Windows. Habilite las salidas “http ” y “Stream “. Si deja los puertos configurados en sus valores predeterminados, su URL de Stream será y su URL de instantánea será.

Puede configurarlos mediante el cuadro de diálogo de configuración de OctoPrint (véase más abajo) o en su config.yaml en %APPDATA%/OctoPrint:

webcam:
  stream: http://:8081/video.mjpg
  snapshot: http://localhost:8888/out.jpg

Si usted también quiere ser capaz de utilizar timelapsing, usted tendrá que obtener una compilación estática de Windows de ffmpeg. Ésos se pueden encontrar aqui. A continuación, configure la ruta de acceso a ffmpeg. exe mediante el cuadro de diálogo Configuración (véase más abajo) o config. yaml:

webcam:
  stream: http://:8081/video.mjpg
  snapshot: http://localhost:8888/out.jpg
  ffmpeg: C:\your\path\to\ffmpeg.exe

Webcam and timelapse configuration in OctoPrint's settings


Nota: la captura de pantalla muestra 192.168.1.3 como la IP del PC en la secuencia configurada-URL. Usted necesitará ajustar eso para emparejar su IP de PCS!

Fuente GitHub.com