6

我设法在控制台应用程序中使用 OWIN 运行我的自托管 WEP API,方法是使用如下代码启动它:

//string baseAddress = "http://192.168.1.6:8111/";
string baseAddress = "http://+:8111/";

// Start OWIN host 
using (Microsoft.Owin.Hosting.WebApp.Start<Startup>(url: baseAddress))
{
    Console.ReadLine();
}

通过在服务主机上使用和注册像“ http://+:9000/ ”这样的地址,这个想法是为主机使用通用 IP 地址,当主机的 IP 可能发生变化时,它不会影响客户端。

客户端位于运行服务的机器之外的其他机器上。像局域网中的移动电话或局域网中的另一台笔记本电脑,如果可能的话,将来还会出现在局域网之外。

在我的自托管服务客户端(一个 html 页面)中,我有一个 JavaScript 代码,例如:

//var uri = 'http://192.168.1.6:8111/api/tests';
var uri = 'http://+:8111/api/tests';

function Read()
{
    $.getJSON(uri + '/' + id)
}

通过使用客户端中主机的静态注释 IP 地址,我可以访问自托管的 WEB API,但是当我尝试使用通用的“ http://+:9000/api/tests ”时,它无法连接到服务。

有没有办法通过使用这样的通用配置从客户端连接到服务?或者我应该如何配置服务主机和客户端,以便主机上的 IP 更改不会停止客户端机器上的服务?

我需要考虑到我的自托管机器的 IP 地址可能会更改,并且客户端将失去连接,因为他们将使用服务主机的旧 IP 地址。

4

2 回答 2

10

如果客户端在同一个 LAN 中,您可以通过名称而不是 IP 地址请求主机。

要查找主机名,请在主机上打开命令提示符并键入:hostname

它将显示主机名,例如myhost. 然后你可以请求它作为http://myhost:8111或任何端口。

对于 LAN 之外的客户端,您必须使用 DNS。或者如果可以选择通过 VPN 连接。

于 2018-02-14T22:39:09.247 回答
2

在您的顶级示例中,您托管在特定端口上侦听的服务,您声明无论请求如何找到服务器、直接 IP、DNS 解析或您有什么,如果它是通过 http 和端口 8111 进入的然后通过您的代码发送。

在您的第二个示例 javascript 中,您正在发出请求。此请求不能说将此请求发送到端口 8111 上的任何 IP。看到区别了吗?

我会假设提供 javascript 的服务器也是您希望连接的服务器。如果是这种情况,有两种选择:

  1. 只需将 javascript 中的 uri 值更改为:var uri = '/api/tests';
  2. 使您的 javascript 动态化,并让它使用生成包含 javascript 的网页的请求中的 Request.Url.Authority。由于我不知道您使用什么来交付 javascript,因此我将避免举例。

如果不是这种情况,那么您需要了解客户端需要知道制作此api/test/{id}的位置。

于 2018-02-15T21:20:15.963 回答