【问题标题】:How to enable OWIN logging on Windows 7如何在 Windows 7 上启用 OWIN 日志记录
【发布时间】:2013-12-23 18:03:09
【问题描述】:

我正在尝试实现登录到我的 OWIN 自托管解决方案。

我的MiddleWare班级如下:

public class HostingMiddleware : OwinMiddleware
{
    private readonly ILogger _logger;

    public HostingMiddleware(OwinMiddleware next, IAppBuilder builder)
        : base(next)
    {
        _logger = builder.CreateLogger<HostingMiddleware>();
    }

    public override Task Invoke(IOwinContext context)
    {
        _logger.WriteVerbose(string.Format("{0} {1}: {2}"));
        context.Response.Headers.Add("Content-Type", new[] 
                                                     { 
                                                        "text/plain"
                                                     });
        return Invoke(context);
    }
}

然后我在 Startup 课程中使用它。

public class Startup
{
   public void Configuration(IAppBuilder builder)
   {
      // Initialize the configuration for Web API self-host.
      HttpConfiguration config = new HttpConfiguration();

      // Map the default Web API HTTP Route
      config.Routes.MapHttpRoute(
          name: "DefaultApi",
          routeTemplate: "api/{controller}/{id}",
          defaults: new { id = RouteParameter.Optional }
      );

      // Use Web API
      builder.UseWebApi(config);

      builder.Use<HostingMiddleware>(builder);
   }
}

当我删除 builder.Use&lt;HostingMiddleware&gt;(builder); 时,我可以发出 HTTP 请求并获得响应,但是当我实现 Middleware 类时,我得到:

No WebSocket support detected, Windows 8 or later is required.

从那里开始,日志记录无法正常工作。当然有一种方法可以让日志记录在 Windows 7 环境中工作,否则该功能会变得毫无用处?关于我需要做什么的任何想法?

提前致谢。

【问题讨论】:

  • 当我在不使用 WebAPI 的情况下通过一个简单示例进行尝试时,无法重现此问题。您确定您的请求没有由 WebApi 处理并且直到 HostingMiddleware 才到达?或者您是否打算让这个 HostingMiddleware 实际上记录到这个 WebAPI 的每个请求并添加一个响应标头 - 如果是这样,请尝试在 UseWebApi(config) 之前注册中间件。
  • 一个错误的地方是“return Invoke(context);”这只会导致同一个调用一遍又一遍的巨大循环。

标签: c# owin self-hosting katana


【解决方案1】:

你需要使用Next.Invoke(context),而不是你在做什么。

您在日志记录中还有一个“错误” - 我不知道您想要记录什么 - 我添加了我自己的。

祝 oWin 好运 - 我喜欢它。


public class HostingMiddleware : OwinMiddleware
{
    private readonly ILogger _logger;

    public HostingMiddleware(OwinMiddleware next, IAppBuilder builder)
        : base(next)
    {
        _logger = builder.CreateLogger();
    }

    public async override Task Invoke(IOwinContext context)
    {
        _logger.WriteVerbose(string.Format("{0} --- {1}", context.Request.Uri.AbsolutePath, context.Request.QueryString);
        await Next.Invoke(context);
    }
}

您必须阅读:Understanding OWIN, Katana, and the Middleware Pipeline

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 2020-05-19
    • 1970-01-01
    • 2014-11-02
    • 2011-03-16
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2018-07-23
    相关资源
    最近更新 更多