Detección de la clase de inicio OWIN
En este tutorial se muestra cómo configurar la clase de startup de OWIN que se carga. Para obtener más información sobre OWIN, consulte Introducción al proyecto Katana. Este tutorial fue escrito por Rick Anderson (@RickAndMSFT), Praburaj Thiagarajan y Howard Dierking (@howard_dierking).
Requisitos previos
Detección de la clase de inicio OWIN
Cada aplicación OWIN tiene una clase de startup donde se especifican componentes para la canalización de la aplicación. Hay diferentes maneras de conectar la clase de startup con el runtime, en función del modelo de hospedaje que elija (OwinHost, IIS e IIS-Express). La clase de startup que se muestra en este tutorial se puede usar en todas las aplicaciones host. La clase de startup se conecta con el runtime de hospedaje mediante uno de los métodos siguientes:
Convención de nomenclatura: Katana busca una clase denominada
Startup
en el espacio de nombres que coincida con el nombre del ensamblado o el espacio de nombres global.AtributoOwinStartup: este es el enfoque que la mayoría de los desarrolladores tomará para especificar la clase de startup. El atributo siguiente establecerá la clase de startup en la clase
TestStartup
del espacio de nombresStartupDemo
.[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
El atributo
OwinStartup
invalida la convención de nomenclatura. También puede especificar un nombre descriptivo con este atributo; sin embargo, el uso de un nombre descriptivo requiere que también use el elementoappSetting
en el archivo de configuración.El elemento appSetting del archivo de configuración: el elemento
appSetting
invalida el atributoOwinStartup
y la convención de nomenclatura. Puede tener varias clases de startup (cada una con un atributoOwinStartup
) y configurar qué clase de startup se cargará en un archivo de configuración mediante marcado similar al siguiente:<appSettings> <add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> </appSettings>
También se puede usar la siguiente clave, que especifica explícitamente la clase de startup y el ensamblado:
<add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" />
El siguiente código XML del archivo de configuración especifica un nombre descriptivo de clase de startup de
ProductionConfiguration
.<appSettings> <add key="owin:appStartup" value="ProductionConfiguration" /> </appSettings>
El marcado anterior debe usarse con el atributo siguiente
OwinStartup
, que especifica un nombre descriptivo y hace que la claseProductionStartup2
se ejecute.[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup2))] namespace StartupDemo { public class ProductionStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } public class ProductionStartup2 { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " 2nd Production OWIN App"); }); } } }
Para deshabilitar la detección de startup de OWIN, agregue
appSetting owin:AutomaticAppStartup
con un valor de"false"
en el archivo web.config.<add key="owin:AutomaticAppStartup" value="false" />
Crear una aplicación web de ASP.NET mediante OWIN Startup
Cree una aplicación web Asp.Net vacía y asígnele el nombre StartupDemo. - Instalar
Microsoft.Owin.Host.SystemWeb
mediante el administrador de paquetes NuGet. En el menú Herramientas, seleccione Administrador de paquetes NuGet y, después, Consola del administrador de paquetes. Escriba el comando siguiente:Install-Package Microsoft.Owin.Host.SystemWeb
Agregue una clase de startup de OWIN. En Visual Studio 2017, haga clic con el botón derecho en el proyecto y seleccione Agregar clase. En el cuadro de diálogo Agregar nuevo elemento, escriba OWIN en el campo de búsqueda y cambie el nombre a Startup.cs y, a continuación, seleccione Agregar.
La próxima vez que quiera agregar una clase de startup de Owin, estará disponible en el menú Agregar.
Como alternativa, puede hacer clic con el botón derecho en el proyecto y seleccionar Agregar, después Nuevo elemento y, a continuación, seleccione la clase de startup de Owin.
Reemplace el código generado en el archivo Startup.cs por lo siguiente:
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; using System.IO; //[assembly: OwinStartup(typeof(StartupDemo.Startup))] namespace StartupDemo { public class Startup { public void Configuration(IAppBuilder app) { app.Use((context, next) => { TextWriter output = context.Get<TextWriter>("host.TraceOutput"); return next().ContinueWith(result => { output.WriteLine("Scheme {0} : Method {1} : Path {2} : MS {3}", context.Request.Scheme, context.Request.Method, context.Request.Path, getTime()); }); }); app.Run(async context => { await context.Response.WriteAsync(getTime() + " My First OWIN App"); }); } string getTime() { return DateTime.Now.Millisecond.ToString(); } } }
La expresión lambda
app.Use
se usa para registrar el componente de middleware especificado en la canalización de OWIN. En este caso, estamos configurando el registro de las solicitudes entrantes antes de responder a la solicitud entrante. El parámetronext
es el delegado (Func<Task>) al siguiente componente de la canalización. La expresión lambdaapp.Run
enlaza la canalización a las solicitudes entrantes y proporciona el mecanismo de respuesta.Nota:
En el código anterior hemos comentado el atributo
OwinStartup
y nos basamos en la convención de ejecutar la clase denominadaStartup
. Presione F5 para ejecutar la aplicación. Presione actualizar varias veces.Nota: el número que se muestra en las imágenes de este tutorial no coincidirá con el número que usted ve. La cadena de milisegundos se usa para mostrar una nueva respuesta al actualizar la página. Puede ver la información de seguimiento en la ventana Salida.
Agregar más clases de startup
En esta sección agregaremos otra clase de startup. Puede agregar varias clases de startup de OWIN a la aplicación. Por ejemplo, es posible que quiera crear clases de startup para desarrollo, pruebas y producción.
Cree una nueva clase de startup de OWIN y asígnele el nombre
ProductionStartup
.Reemplace el código generado con el siguiente:
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] namespace StartupDemo { public class ProductionStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } }
Presione Control F5 para ejecutar la aplicación. El atributo
OwinStartup
especifica que se ejecuta la clase de startup de producción.Cree otra clase de startup de OWIN y nómbrela
TestStartup
.Reemplace el código generado con el siguiente:
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup("TestingConfiguration", typeof(StartupDemo.TestStartup))] namespace StartupDemo { public class TestStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Test OWIN App"); }); } } }
La sobrecarga de atributo
OwinStartup
anterior especificaTestingConfiguration
como el nombre descriptivo de la clase Startup.Abra el archivo web.config y agregue la clave de startup de la aplicación OWIN que especifica el nombre descriptivo de la clase Startup:
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="owin:appStartup" value="TestingConfiguration" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
Presione Control F5 para ejecutar la aplicación. El elemento de configuración de la aplicación toma precedentes y se ejecuta la configuración de prueba.
Quite el nombre descriptivo del atributo
OwinStartup
de la claseTestStartup
.[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
Reemplace la clave de startup de la aplicación OWIN en el archivo web.config por la siguiente:
<add key="owin:appStartup" value="StartupDemo.TestStartup" />
Revierta el atributo
OwinStartup
de cada clase al código de atributo predeterminado generado por Visual Studio:[assembly: OwinStartup(typeof(StartupDemo.Startup))] [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
Cada una de las claves de startup de la aplicación OWIN siguientes hará que se ejecute la clase de producción.
<add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup.Configuration, StartupDemo" />
La última clave de startup especifica el método de configuración de startup. La siguiente clave de startup de la aplicación OWIN permite cambiar el nombre de la clase de configuración a
MyConfiguration
.<add key="owin:appStartup" value="StartupDemo.ProductionStartup2.MyConfiguration" />
Uso de Owinhost.exe
Reemplace el archivo Web.config por el marcado siguiente:
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="owin:appStartup" value="StartupDemo.Startup" /> <add key="owin:appStartup" value="StartupDemo.TestStartup" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
La última clave gana, por lo que en este caso
TestStartup
se especifica.Instale Owinhost desde PMC:
Install-Package OwinHost
Vaya a la carpeta de la aplicación (la carpeta que contiene el archivo Web.config) y en un símbolo del sistema y escriba:
..\packages\Owinhost<Version>\tools\Owinhost.exe
La ventana de comandos mostrará:
C:\StartupDemo\StartupDemo>..\packages\OwinHost.2.0.0\tools\Owin Host.exe Starting with the default port: 5000 (http://localhost:5000/) Started successfully Press Enter to exit
Inicie un explorador con la dirección URL
http://localhost:5000/
.OwinHost respeta las convenciones de startup enumeradas anteriormente.
En la ventana de comandos, presione Entrar para salir de OwinHost.
En la clase
ProductionStartup
, agregue el siguiente atributo OwinStartup que especifica un nombre descriptivo de ProductionConfiguration.[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup))]
En el símbolo del sistema y escriba:
..\packages\OwinHost.2.0.0\tools\OwinHost.exe ProductionConfiguration
Se carga la clase de startup Production.
Nuestra aplicación tiene varias clases de startup y, en este ejemplo, hemos aplazado la clase de startup que se va a cargar hasta el runtime.
Pruebe las siguientes opciones de startup de runtime:
..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe StartupDemo.TestStartup ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe "StartupDemo.TestStartup,StartupDemo" ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe StartupDemo.TestStartup.Configuration ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe "StartupDemo.TestStartup.Configuration,StartupDemo"
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de