是否可以公开 Owin 服务?

Is it possible to expose an Owin service?

我们已经使用 OWIN 创建了自托管服务。它们在服务器内部运行良好,我们可以使用 http://localhost. We use a different port for each service so that we can go and get certain information from http://localhost:8001, other from http://localhost:8015 等请求和检索信息。

现在,我们需要公开其中一项自托管服务的结果,以便通过 Internet 访问它。我们想提供一个自定义地址,例如 http://ourpublicinfo.mydomain.com:8001 or using the server ip such http://209.111.145.73:8001.

这可能吗?

我们如何实施它?

我们的服务器 OS 是 Windows Server 2012 R2

OWIN 自托管应用程序可以 运行 在 Windows 服务上作为控制台进程,如果需要,还可以作为更强大的主机(如 IIS)的一部分。

既然您提到您的应用程序是 运行宁作为服务,您可能会错过 IIS 提供的所有 GUI 好东西。然而实际上,IIS 在 http.sys 之上工作,就像 HttpListener 所做的那样(这可能是您用来自托管应用程序的东西)1。您只需要自己进行一些手动设置:

  1. 首先,您需要URL保留才能在非标准端口上发布。

你为什么要那样做? 很简单,因为你不再 运行 在你自己的本地机器上单独在 localhost 下,你可能是admin and/or 有特别的 privileges/powers.

因为这是一个服务器,而用于 运行 服务的用户可能不是管理员(很可能),那么您需要授予该用户使用该服务的权限 URL...这里是 URL 预订出现的地方。

你几乎必须选择:

  • 打开URL供任何用户使用:

     netsh http add urlacl url=http://209.111.145.73:8001/ user="everyone" listen=yes
    
  • 或打开URL供用户运行使用服务,例如:NETWORK SERVICE:

     netsh http add urlacl url=http://209.111.145.73:8001/ user="NETWORK SERVICE" listen=yes
    

也有一种方法可以为多个用户进行预订,使用 sddl、用户组等...但我不会详细介绍(您可以查一下)。

  1. 其次,你需要通过你的防火墙开辟一个大厅(如果你在这个时代没有,我同情你!)

关于这方面的教程很多。您可以使用 GUI,netsh.exe 而不是。

几乎所有您需要做的就是确保允许通过该端口的传入连接,这应该可以解决问题。

要确保大厅完全开放,您可以使用 http://www.yougetsignal.com/tools/open-ports/ 之类的工具,并在 远程地址 中插入 209.111.145.73 并在 端口号.

如果出于某种原因它显示端口已关闭,即使在您的防火墙中为其创建了传入规则之后,那么您的服务器和外界之间可能有一个或多个防火墙。


有了这些元素,您应该能够从外部访问您的自托管服务。

至于通过像 http://ourpublicinfo.mydomain.com:8001 这样的地址访问您的服务,您需要在某处创建一个 DNS 条目,很可能是在您的 mydomain.com[= 的域名注册商处67=],您可以在其中为指向 209.111.145.73.

ourpublicinfo 子域创建 A 记录

从现在开始,您应该可以通过直接 IP 和端口或通过上述 URL.

访问您的服务

祝你好运!

Note: If your service will be access from other domains, you might need to make sure you have CORS (Cross Origen Resourece Sharing) well defined and working on your service too ;)