22

私はMicrosoft.Owin.Hosting次の非常に単純な Web アプリをホストするために使用しています。

これを開始するための呼び出しは次のとおりです。

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

私が使用しているスタートアップクラスは次のとおりです。

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

特定のファイルへのトレース書き込みのルーティングなど、他の多くのことを行うコンソール アプリケーション内でこれを実行しています。そうしないと。

明らかに、OWIN ホスティング フレームワークでアクティブなトレース リスナーがいくつかあります。どうすればオフにできますか?

4

3 に答える 3

12

最新の Katana セルフホスト (2.1.0) で動作する meilke からの回答の代替:

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 は DummyFactory に似ていますが、StringWriter の代わりに StreamWriter.Null を使用します。

public class NullTraceOutputFactory : ITraceOutputFactory
{
    public TextWriter Create(string outputFile)
    {
        return StreamWriter.Null;
    }
}
于 2014-03-11T13:25:52.940 に答える
1

私は自分で解決策を見つけました。ITraceOutputFactoryKatana のソース コードを調べた後、デフォルトのトレース リスナー (コンソールに書き込みます) を無効にするために、独自のインスタンスを登録する必要があるようです。

新しい開始呼び出しは次のとおりです。

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();
}

そして、ここにダミーのトレース ファクトリがあります (最適な解決策ではないかもしれませんが、目的に適したものに置き換えることができます)。

public class DummyFactory : ITraceOutputFactory
{
    public TextWriter Create(string outputFile)
    {
        return TextWriter.Null;
    }
}
于 2013-07-31T10:57:26.217 に答える