Web API自托管客户端配置

时间:2018-02-11 16:15:23

标签: c# .net asp.net-web-api self-host-webapi

我设法在控制台应用程序中使用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可能发生变化时,该地址不会影响客户端。 / p>

客户端位于运行服务的其他计算机上。类似于局域网中的移动电话或来自局域网的其他笔记本电脑,以及将来如果可能的话,也可以在局域网之外。

在我的自托管服务的客户端,这是一个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”时,它无法连接到服务。< / p>

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

我需要考虑到我的自托管计算机的IP地址可能会发生变化,客户端将失去连接,因为他们将使用服务主机的旧的过时IP地址。

2 个答案:

答案 0 :(得分:10)

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

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

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

对于局域网以外的客户,您必须使用DNS。或者通过VPN连接,如果这是一个选项。

答案 1 :(得分:2)

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

在你的第二个例子中,javascript,你正在提出请求。此请求不能说将此请求发送到端口8111上的任何IP。请参阅差异?

我认为提供javascript的服务器也是你想要连接的服务器。如果是这种情况,有两种选择:

  1. 只需将您的javascript中的uri值更改为:var uri = '/api/tests';
  2. 让您的javascript动态化并让它使用生成包含javascript的网页的请求中的Request.Url.Authority。由于我不知道你用什么来提供javascript,我将不再举例。
  3. 如果情况并非如此,那么您需要了解客户需要知道在哪里制作 api / test / {id}