tutorial owinstartup net cantante asp c# owin

c# - owinstartup - TraceListener en OWIN Self Hosting



owin web api (3)

Estoy usando Microsoft.Owin.Hosting para alojar la siguiente aplicación web, muy simple.

Aquí está la llamada para iniciarlo:

WebApp.Start<PushServerStartup>("http://localhost:8080/events");

Aquí está la clase de inicio que estoy usando:

public class PushServerStartup { public void Configuration(IAppBuilder app) { app.MapHubs(); } }

Estoy ejecutando esto dentro de una aplicación de consola que hace muchas otras cosas, incluida la escritura de rastreo de enrutamiento a ciertos archivos, etc. Pero de repente (al activar el alojamiento OWIN) estoy viendo mensajes de rastreo escritos en la consola que normalmente se enrutan en algún lugar más.

Obviamente, hay algunos escuchas de rastreo activos en el marco de alojamiento OWIN. ¿Cómo puedo apagarlos?



Una alternativa a la respuesta de meilke que funciona con el último host automático de Katana (2.1.0):

StartOptions options = new StartOptions("http://localhost:8080/events"); // disable built-in owin tracing by using a null traceoutput options.Settings.Add( typeof(Microsoft.Owin.Hosting.Tracing.ITraceOutputFactory).FullName, typeof(NullTraceOutputFactory).AssemblyQualifiedName); using (WebApp.Start<PushServerStartup>(options))

NullTraceOutputFactory es similar a DummyFactory pero usando StreamWriter.Null en lugar de StringWriter:

public class NullTraceOutputFactory : ITraceOutputFactory { public TextWriter Create(string outputFile) { return StreamWriter.Null; } }


Yo mismo encontré una solución. Después de estudiar el código fuente de Katana, parece que necesita registrar su propia instancia de ITraceOutputFactory para anular la escucha de seguimiento predeterminada (que está escribiendo en la consola).

Aquí está la nueva llamada de inicio:

var dummyFactory = new DummyFactory(); var provider = ServicesFactory.Create( defaultServiceProvider => defaultServiceProvider.AddInstance<ITraceOutputFactory>(dummyFactory)); using (WebApp.Start<Startup>(provider, new StartOptions("http://localhost:8090"))) { Console.ReadLine(); }

Y aquí hay un dummy trace factory (quizás no sea la mejor solución, pero puede reemplazarla con algo que sirva un poco mejor a su propósito):

public class DummyFactory : ITraceOutputFactory { public TextWriter Create(string outputFile) { return TextWriter.Null; } }