使用 OWIN 将 Web API 作为 Windows 服务托管

2024-03-04

我正在尝试使用 OWIN 将 Web API 应用程序作为 Windows 服务运行。但是,在尝试启动服务时,我收到以下消息:

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

由于某种原因,我的服务不明白它应该继续监听http://本地主机:9000 http://localhost:9000

VS 解决方案由两个项目组成:Web API 和 Windows 服务。

在 Windows 服务项目中我有:

static class Program
{
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] 
        { 
            new Service() 
        };
        ServiceBase.Run(ServicesToRun);
    }
}

public partial class Service : ServiceBase
{
    private const string _baseAddress = "http://localhost:9000/";
    private IDisposable _server = null;

    public Service()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        _server = WebApp.Start<Startup>(url: _baseAddress);
    }

    protected override void OnStop()
    {
        if (_server != null)
        {
            _server.Dispose();
        }
        base.OnStop();
    }
}

In OnStart the Startup指的是StartupWeb API 项目中的类:

public class Startup
{
    public void Configuration(IAppBuilder builder)
    {
        var config = new HttpConfiguration();        
        config.Routes.MapHttpRoute("Default",
            "{controller}/{id}",
            new { id = RouteParameter.Optional });
        builder.UseWebApi(config);
    }
}

(它还包含一些 Unity 和日志记录的配置。)

我想 Windows 服务项目的安装程序部分大部分是无关紧要的,尽管知道我有:

this.serviceProcessInstaller.Account = System.ServiceProcess.ServiceAccount.LocalService;

我尝试过的:

  • 使用控制台应用程序托管 Web API,然后将控制台应用程序托管为 Windows 服务。但即使我包含了“Console.ReadKey()”,它还是停止了。
  • 要遵循本指南:OWIN-WebAPI-服务 https://github.com/danesparza/OWIN-WebAPI-Service奇怪的是,我可以让他的服务正常工作,但是当我尝试更改代码以匹配他的设置时,我不断收到相同的错误。

完整源代码:github.com/SabrinaMH/RoundTheClock-Backend/tree/exploring_hosting


当您收到“本地计算机上的服务启动然后停止”时,通常意味着启动服务时存在未捕获的异常。看一眼本地计算机上的 Windows 服务启动然后停止错误 https://stackoverflow.com/questions/12209075/windows-service-on-local-computer-started-and-then-stopped-error,了解查找该异常的提示。

根据您的描述,我猜测问题是由启动类存在于不同的项目中引起的,您是否尝试过在窗口服务项目中使用启动类?

另外,来自 StackOverflow 的链接(https://github.com/danesparza/OWIN-WebAPI-Service https://github.com/danesparza/OWIN-WebAPI-Service),显示了从不同项目加载控制器或将程序集动态解析到当前 AppDomain 中的解决方法。我想这也值得尝试。

希望这可以帮助。

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

使用 OWIN 将 Web API 作为 Windows 服务托管 的相关文章

  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 当我在组合框中选择一个项目时,如何防止 TextChanged 事件?

    我有一个TextChanged http msdn microsoft com en us library system windows forms control textchanged aspx我的事件ComboBox http msd
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string

随机推荐

  • GWT为移动设备定制CellList多选模型

    我有一个使用 MultiSelectionModel 的应用程序 它工作得很好 但我需要我正在开发的网站才能在移动设备上工作 所以我无法使用键盘来帮助选择元素 因为它不支持 不存在 例如 在桌面上 我只需按住 ctrl 并单击我想要选择的所
  • SQLAlchemy 提交 pickle 类型

    我在 sqlalchemy 中提交对 pickle 类型 列表 的更改时遇到问题 提交后它将表现得好像什么也没发生一样 这是我尝试提交的功能 def commit move game id player move game game que
  • 管理包:PyCharm vs conda vs pip

    我是 Python 新手 最近在 Windows 10 上安装了 PyCharm 2016 3 我还使用 Anaconda 3 我对包管理不太了解 想更好地了解它 通常我只是使用conda update all但我注意到 通过检查本地 Py
  • Html画布1600x1200屏幕撕裂

    我见过几个关于这个问题的问题 但它们都已经存在了三年多了 通常最后都会说还没有太多解决办法 所以我想知道是否有什么改变 我目前正在开发一款游戏 该游戏使用每秒发生 60 次的间隔在画布上进行绘制 它在我的 iPhone 和 PC 上运行得很
  • Pandas - 保持至少有两个不同代码的组

    我正在使用具有以下结构的 DataFrame import pandas as pd df pd DataFrame group 1 1 1 2 2 2 2 3 3 3 4 4 brand A B X A B C X B C X A B c
  • Symfony2 Crawler - 将 UTF-8 与 XPATH 结合使用

    我正在使用 Symfony2 Crawler Bundle 来使用 XPath 除了编码之外 一切正常 我想使用 UTF 8 编码 但 Crawler 不知何故没有使用它 我注意到因为 nbsp 被转换为 nbsp 这是一个已知问题 UTF
  • 尝试为银行应用程序调用名为 addAccount 的方法,但它一直给出 .class is Expected 错误

    当我尝试调用时 这给了我错误addAccount方法说 class 应该出现在我尝试调用它的行上 我正在尝试做一项作业 我应该创建一个名为的方法addAccount接受两个参数 accountName and accountBalance并
  • 如何在 Microsoft Word 字段中显示下个月?

    我需要在 Word 2003 文档中显示当前月份之后的月份名称 显示当前月份相当容易 DATE MMMM 在撰写本文时 显示 九月 我想要展示的是十月 而我一生都无法弄清楚需要做什么 我一直在尝试遵循以下建议添加余额 http addbal
  • 为什么静态方法不被视为良好的面向对象实践? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在阅读斯卡拉编程 https rads stackoverflow com amzn click com 193435631X 在第 4 章
  • 在 7.3/9/2+ Swift 中,当设备旋转时如何禁用旋转动画?

    这个问题严格来说是关于iOS9 的 假设您有一个普通的现代应用程序 自动布局 故事板 通用 它允许所有四个旋转位置 您希望它以正常方式自动旋转 因此当用户将设备从横向旋转为纵向时 它将更改为新的基于约束的布局 但您只是希望在用户旋转设备期间
  • 通过 VPN 在 Android 上创建 WebAPK 失败

    我的公司 VPN 阻止来自 Android 设备的所有外部流量 我正在尝试测试内部托管的 PWA 防火墙内的所有资源 我观察到 尽管通过了 Lighthouse 审核 但我的 PWA 在设备上的 WebAPK 创建过程中失败了 具体来说 安
  • LINQ to XML 获取 XElement 值

    我在从 LINQ to XML 查询获取一些值时遇到问题 我从 SOAP Web 服务获取了 XML 并将其传递并解析为 XDocument 进行查询 The XML
  • 在按单个列上的多个值进行内部联接查询过滤时选择“不同”?

    所以 我不得不说 SQL 是迄今为止我作为开发人员最薄弱的一面 也许我想要完成的事情很简单 我有这样的东西 这不是真正的模型 但为了使其易于理解而不浪费太多时间解释它 我想出了一个完全模仿我必须使用的表关系的示例 一方面 有一个表 我们称之
  • 放置在自定义指令中的 ui-codemirror 失败且没有错误

    我正在尝试使用 ui codemirror 角度指令代码镜像角度库 http angular ui github io ui codemirror build ui codemirror js用例是我必须将其放在自定义指令中 但是当我将它放
  • Shell 脚本无法识别heredoc分隔符

    我正在尝试在 Linux 中编写一个非常简单的 shell 脚本 我想要实现的场景是 创建用户帐户并在内部为其指定密码 不允许与用户交互 一旦成功 只需向用户显示一条成功消息 其余的都不应显示 在 RHEL 上 这非常简单 因为 passw
  • Redis IOException:使用 ServiceStack C# 客户端“现有连接被远程主机强制关闭”

    我们有以下设置 RackspaceCloud 8GB 实例上 Ubuntu Linux 12 04LTE 上的 Redis 2 6 具有以下设置 daemonize yes pidfile var run redis 6379 pid po
  • LogCat 和控制台停止与 Eclipse Android 模拟器一起使用

    控制台和 LogCat 打印输出在带有 Android 模拟器的 Eclipse 中停止工作 我在控制台中收到以下异常 2011 11 10 11 04 58 启动 logcat 时出现意外错误 尝试重新选择设备 未找到设备 com and
  • 如何在 Netbeans 中配置 Java 导入的组织

    目前 Netbeans 我使用的是 7 3 1 版本 具有通过菜单组织 Java 文件中导入的内置功能来源 组织进口 但我需要更改默认的导入顺序 例如 在共享环境中工作时 软件开发人员必须使用相同的导入设置 有什么办法可以做到吗 Try C
  • 在 MySQL 和 Python 中以可重复的方式处理 1970 年之前的日期

    在我的 MySQL 数据库中 我的日期可以追溯到 1700 年代中期 我需要以某种方式将其转换为类似于 Unix 时间的格式的整数 int 的值并不重要 只要我可以从数据库或用户输入中获取日期并生成相同的 int 即可 我需要使用 MySQ
  • 使用 OWIN 将 Web API 作为 Windows 服务托管

    我正在尝试使用 OWIN 将 Web API 应用程序作为 Windows 服务运行 但是 在尝试启动服务时 我收到以下消息 本地计算机上的 ServiceName 服务启动然后停止 如果其他服务或程序未使用某些服务 则会自动停止 由于某种