通过 Owin 托管 Web API 2 的 Windows 服务启动并立即停止,没有抛出任何异常

2024-01-01

标题总结了我的问题。我有try-catch服务周围的街区OnStart方法和Main服务中的方法,并且不会抛出任何异常。该服务启动并立即停止,并显示以下消息:

本地计算机上的 Foo 服务启动然后停止。一些 如果其他服务未使用服务,则服务会自动停止 或程序。

在测试服务器上可以观察到相同的行为,因此它不依赖于机器。我已验证配置文件是否存在并且包含适当的设置。

我看不出发生这种情况的任何明显原因。有人可以看一下这个并解释一下吗?我咨询过其他类似的问题,但没有一个问题对这项特定服务有任何启发。

启动.cs:

public class Startup
{
    // This code configures Web API. The Startup class is specified as a type
    // parameter in the WebApp.Start method.
    public void Configuration(IAppBuilder appBuilder)
    {
        // Configure Web API for self-host.
        var config = new HttpConfiguration();
        config.MapHttpAttributeRoutes();
        appBuilder.UseWebApi(config);
    }
}

WebApiService.cs:

public partial class WebApiService : ServiceBase
{
    private readonly IConfig config;
    private IDisposable webApp;

    public WebApiService()
    {
        try
        {
            InitializeComponent();
            this.config = UnityBootstrapper.Initialize().Resolve<IConfig>();
        }
        catch (Exception e)
        {
            new ApplicationEventLog(new Config()).WriteError(e);
        }
    }

    protected override void OnStart(string[] args)
    {
        try
        {
            var baseUrl = $"http://*:{this.config.WebApiHttpPort}";

            this.webApp = WebApp.Start<Startup>(baseUrl);
        }
        catch (Exception e)
        {
            new ApplicationEventLog(this.config).WriteError(e);
        }
    }

    protected override void OnStop()
    {
        this.webApp?.Dispose();
        this.webApp = null;
    }

    protected override void OnShutdown()
    {
        this.webApp?.Dispose();
        this.webApp = null;
    }
}

WebApiService.Designer.cs

partial class WebApiService
{
    /// <summary> 
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Component Designer generated code

    /// <summary> 
    /// Required method for Designer support - do not modify 
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        components = new System.ComponentModel.Container();
        this.ServiceName = "Foo";
    }

    #endregion
}

程序.cs:

public static class Program
{
    public static bool IsConsoleApp = false;
    public static bool LogRequests = false;

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    public static void Main(params string[] args)
    {
        try
        {
            if (args.Length > 0 && args.Any(a => a.ToLower().In("l", "-l", "/l")))
            {
                LogRequests = true;
            }

            if (args.Length > 0
                && args[0].ToLower().In("c", "-c", "/c"))
            {
                RunAsApp();
            }
            else
            {
                RunAsService();
            }
        }
        catch (Exception e)
        {
            new ApplicationEventLog(new Config()).WriteError(e);
        }
    }

    private static void RunAsService()
    {
        Program.IsConsoleApp = false;

        var servicesToRun = new ServiceBase[]
                                      {
                                          new WebApiService()
                                      };
        ServiceBase.Run(servicesToRun);
    }

    private static void RunAsApp()
    {
        Program.IsConsoleApp = true;

        var config = UnityBootstrapper.Initialize().Resolve<IConfig>();
        var url = $"http://*:{config.WebApiHttpPort}";

        Console.WriteLine($@"Running. Hosted at: {url}");
        Console.WriteLine(@"Press ENTER to exit.");

        using (WebApp.Start<Startup>(url))
        {
            while (Console.ReadKey().Key != ConsoleKey.Enter)
            {
                Thread.Sleep(0);
            }
        }

        Program.IsConsoleApp = false;
    }
}

日志控制器.cs:

[RoutePrefix("api/log")]
public class LogController : ApiController
{
    private readonly ILogger logger;
    private readonly IContextFactory contextFactory;
    private readonly IConfig config;

    public LogController() : base()
    {
        var container = UnityBootstrapper.Initialize();

        this.logger = container.Resolve<ILogger>();
        this.config = container.Resolve<IConfig>();
        this.contextFactory = container.Resolve<IContextFactory>();
    }

    [HttpGet]
    [Route("Status")]
    public string Status()
    {
    }

    [HttpPost]
    [Route("Message")]
    public string Write([FromBody] LogMessage logMessage)
    {
        // Elided for ... reasons
    }

    [HttpPost]
    [Route("Performance")]
    public string Write([FromBody] PerformanceMessage performanceMessage)
    {
        // Elided for ... reasons
    }
}

Edit:添加了 WebApiService.Designer.cs,因为服务从 InitializeComponent 返回时会关闭。

Edit 2: 我已经追踪到了WebApp.Start<Startup>(baseUrl) in WebApiService.cs. A 目标调用异常被抛出,带有HttpListenerException作为内部异常。 HttpListenerException 上的消息是“访问被拒绝”。

System.Reflection.TargetInvocationException occurred
  HResult=0x80131604
  Message=Exception has been thrown by the target of an invocation.
  Source=mscorlib
  StackTrace:
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.Owin.Hosting.ServerFactory.ServerFactoryAdapter.Create(IAppBuilder builder)
   at Microsoft.Owin.Hosting.Engine.HostingEngine.StartServer(StartContext context)
   at Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext context)
   at Microsoft.Owin.Hosting.Starter.DirectHostingStarter.Start(StartOptions options)
   at Microsoft.Owin.Hosting.Starter.HostingStarter.Start(StartOptions options)
   at Microsoft.Owin.Hosting.WebApp.StartImplementation(IServiceProvider services, StartOptions options)
   at Microsoft.Owin.Hosting.WebApp.Start(StartOptions options)
   at Microsoft.Owin.Hosting.WebApp.Start[TStartup](StartOptions options)
   at Microsoft.Owin.Hosting.WebApp.Start[TStartup](String url)
   at Foo.Logging.WebApi.WebApiService.OnStart(String[] args) in C:\Dev\Foo\Foo.WebApi\WebApiService.cs:line 45

Inner Exception 1:
HttpListenerException: Access is denied

我研究了造成这种情况的可能原因,可能是 URL 或 ACL。我将网址更改为http://+:{this.config.WebApiHttpPort},无济于事。然后我创建了一个 ACL,如下所示:

netsh http add urlacl http://+:8089/ user=Everyone

错误仍然发生。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Owin 托管 Web API 2 的 Windows 服务启动并立即停止,没有抛出任何异常 的相关文章

  • 格式说明符%02x

    我有一个简单的程序 include
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code

随机推荐

  • 如何自动注入状态参数

    Abstract 你好 我在我的项目中使用 Angular ui router 我有大量的嵌套状态和不同的视图 这些视图又包含大量不同的输入 用户逐步增量地填充这些输入 问题 有时用户需要位于上一步的附加信息 浏览器的 后退 按钮可以帮助用
  • 如何在c中创建自定义数据包?

    我正在尝试使用 TCP IP 协议使用 C 语言制作自定义数据包 当我说自定义时 我的意思是能够更改数据包中的任何值 例如 MAC IP 地址等 我尝试四处搜索 但找不到任何实际指导我或给我示例源代码的东西 如何创建自定义数据包或者我应该在
  • 从 Facebook 墙到 Android 应用程序的新闻提要

    有什么方法可以将 Facebook 墙上的最后一个帖子转移到 Android 应用程序中吗 我想制作一些类似 RSS 阅读器来获取一些有关应用程序的信息 为了更好地解释 我在 Facebook 上有一个关于一个足球俱乐部的页面 在那里我发布
  • 对于项目外的文件,如何在java中将File转换为IFile?

    通常 此代码用于从File to IFile IWorkspace workspace ResourcesPlugin getWorkspace IPath location Path fromOSString file getAbsolu
  • 禁止网站上的机器人[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的网站经常宕机 因为蜘蛛正在访问许多资源 这是主持人告诉我的 他们告诉我禁止这些 IP 地址 46 229 164 98 46 229
  • 将自定义 css 添加到 WordPress 中的页面模板

    你好 我需要一些帮助来为我的页面模板创建自定义 css 文件 关于这个问题有很多主题 但随着我阅读的每个主题 我都会获得更多信息 也更加困惑 我为二十四主题创建了一个子主题 并添加了一个页面模板 我如何将自定义 css 添加到此模板 我发现
  • 在 sql 结果中填充空日期的最直接方法是什么(在 mysql 或 perl 端)?

    我正在从 mysql 表构建一个快速 csv 查询如下 select DATE date count date from table group by DATE date order by date asc 然后将它们转储到 perl 中的
  • 将weld-se 与 Gradle 应用程序插件一起使用时出现 Bean 发现问题

    我正在构建一个基于 Gradle 的 Java SE 应用程序 该应用程序构建在 Hibernate 之上 作为我选择的 ORM 我的计划是使用weld se能够使用 CDI 注释进行注入EntityManagers整个申请过程中 基于共同
  • 标签栏项目色调颜色

    在 iOS 7 中 我一直在开发一个使用 UITabBarController 的应用程序 我注意到即使我更改了选项卡栏的色调颜色 选项卡栏项目仍保持灰色 有什么方法可以更改未选定的选项卡栏项目的颜色吗 要做到这一点 遵循一个简单的方法 根
  • 增加字符串中的字符

    我有以下代码 string str A 我想以编程方式获取下一个字母字符 例如 B C D E 等 谁能建议一种方法来做到这一点 使用而不是整个字符串Char http msdn microsoft com en us library sy
  • 为什么 Duration 类没有“toSeconds()”方法?

    我正在看Duration https docs oracle com javase 8 docs api java time Duration htmlJava 8 中的类并注意到它没有 long toSeconds 但其他的都有了toXX
  • 每个 Ember 环境保留带有多个适配器的固定装置

    尽管自然进展会将夹具适配器更换为另一个适配器 http emberjs com guides getting started using other adapters 我想保留开发环境的固定装置 同时利用不同的 Ember 数据适配器进行生
  • 如何在焦点()上以编程方式隐藏jquery mobile中的键盘

    我想在 Focus 上隐藏键盘 但是当 ui input text focus 它会自动打开键盘 我只想隐藏在特定屏幕中 我进行了测试document activeElement blur 但它也没有 focus on input 提交表单
  • pip:从远程 git 存储库中提取更新

    我安装了scikit学习 https github com scikit learn scikit learn几周前来自 GitHub pip install git git github com scikit learn scikit l
  • 如何读取 Perl 中外部命令的错误输出?

    作为一个更大的 Perl 程序的一部分 我正在检查以下输出diff文件夹中的输入文件与参考文件的命令 其中空白输出 匹配 是通过结果 而 diff 的任何输出都是失败结果 问题是 如果目标文件夹缺少预期文件的数量 则抛出的异常 diff 不
  • 用户如何将输入类型日期设置为空?

    我希望使用 HTML5 DATE 中的新输入属性 只有一个问题 在项目的逻辑中 用户必须可以选择删除该值 但我不知道如何在此输入上设置空值 假设您想让显示的值dd mm yyyy 然后单击Clear button
  • javascript中随机10个1到100之间的数字的最佳方法没有欺骗? [复制]

    这个问题在这里已经有答案了 这个问题已经被问过几十次了 但不知何故 在阅读了很多答案后 我并不相信 我不清楚最好的方法 性能和代码简单性 我是否应该设置列表 1 100 并继续从那里选择随机数 它将运行 10 次 到另一个数组 避免每次新的
  • 如何向 Spring 提交错误报告?

    我无法找到提交错误报告的方法 我只是想报告当前 Spring Data 文档中的一个错误 自 2019 年起 使用https github com spring projects spring framework issues https
  • 如何将动态创建的LinearLayout添加到ScrollView中?

    我想动态添加一些小部件 如下所示 LinearLayout llay new LinearLayout this llay setOrientation LinearLayout HORIZONTAL LinearLayout Layout
  • 通过 Owin 托管 Web API 2 的 Windows 服务启动并立即停止,没有抛出任何异常

    标题总结了我的问题 我有try catch服务周围的街区OnStart方法和Main服务中的方法 并且不会抛出任何异常 该服务启动并立即停止 并显示以下消息 本地计算机上的 Foo 服务启动然后停止 一些 如果其他服务未使用服务 则服务会自