【问题标题】:OWIN - Selfhosting WebApi without specific portOWIN - 没有特定端口的自托管 Web Api
【发布时间】:2014-05-22 12:35:49
【问题描述】:

是否可以在不指定本地端口的情况下自行托管 WebApi 服务:

Microsoft.Owin.Hosting.WebApp.Start<Startup1>("http://localhost:9000")

我认为部署给客户可能会很麻烦(例如防火墙问题或与占用同一端口的其他服务冲突)。

我什么也没找到。每个教程/示例都使用该端口。

没有 Owin 也可以使用 WebApi 服务。

编辑: 我希望该服务根本不使用任何端口。服务器应该像在这个博客中那样运行“内存”: asp-net-web-api-in-memory-hosting/

【问题讨论】:

  • 每个连接都需要端口,如果您不指定它,它将使用默认值(http 为 80,https 为 443)
  • 您可以在不创建 TCP/IP 连接的情况下创建内存主机,因此您不需要端口,但是您将无法进行跨进程请求。如果您只想进行进程内请求,那么 web-api 可以做到这一点。

标签: c# asp.net-web-api localhost owin self-hosting


【解决方案1】:

可能这是一个解决方案: owin-memory-integration-testing

它在 Microsoft.Owin.Testing 包中。

这将允许我们创建一个内存服务器,它将接受 HTTP 请求和发出 HTTP 响应而不接触网络 堆栈(完全在进程中),这既非常有效又 非常快。

【讨论】:

  • 如果你想要内存,那么你甚至不需要让 Owin 参与进来。只需将 HttpClient 连接到 Web api HttpServer。
  • 但是启动中的路由不会被配置,还是我错了?如果是这种情况,那么我必须在两个不同的地方配置路由。
  • 我总是创建一个静态方法,例如MyApi.Register(HttpConfiguration config) 以便我可以重新使用配置设置,无论我使用什么主机。但是,从技术上讲,如果您只打算在内存中托管 Web api,则不再需要 StartUp 类。
【解决方案2】:

将该字符串移至web.config 文件:

<appSettings>
    <add key="_API_URL" value="http://localhost:9000">
</appSettings>

然后你可以在你的代码中使用它:

Microsoft.Owin./*...*/(ConfigurationManager.AppSettings["_API_URL"]);

配置文件中的任何设置都可以在部署期间或之后进行转换,而无需更改代码或重新构建。让“IT 管理员”处理防火墙。

【讨论】:

  • 如果我必须使用端口,这可能是一个解决方案。但我寻找一种解决方案,服务在不使用任何端口的情况下运行“内存”。
猜你喜欢
  • 2019-02-24
  • 2015-01-09
  • 2016-12-15
  • 2017-07-22
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
相关资源
最近更新 更多