Web API 自托管客户端配置
Web API self hosted client configuration
我设法 运行 我在控制台应用程序中使用 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 可能更改时不会影响客户端.
客户端在其他机器上,而不是 运行正在运行该服务的机器。诸如来自 LAN 的手机 phone 或来自 LAN 的另一台笔记本电脑之类的东西,如果可能的话,将来也会在 LAN 之外。
在我的自托管服务的客户端中,这是一个 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 地址。
如果客户端在同一个 LAN 中,您可以通过名称而不是 IP 地址请求主机。
要查找主机名,请在主机上打开命令提示符并键入:hostname
它将显示主机名,例如myhost
。然后您可以将其请求为 http://myhost:8111
或任何端口。
对于 LAN 之外的客户端,您必须使用 DNS。如果可以的话,也可以通过 VPN 连接。
在你上面的例子中,你托管了一个侦听特定端口的服务,你是在声明无论请求如何找到服务器,直接 IP,DNS 解析或者你有什么,如果它是通过http 和端口 8111 然后通过您的代码发送它。
在您的第二个示例中,javascript,您正在发出请求。此请求不能说将此请求发送到端口 8111 上的任何 IP。看到区别了吗?
我假设为 javascript 提供服务的服务器也是您希望连接的服务器。如果是这样的话,有两个选择:
- 只需将 javascript 中的 uri 值更改为:
var uri = '/api/tests';
- 使您的 javascript 动态化,并让它使用生成包含 javascript 的网页的请求中的 Request.Url.Authority。由于我不知道您使用什么来交付 javascript.
,因此我将避免示例
如果不是这种情况,那么您需要了解客户需要知道在哪里制作此 api/test/{id}.
我设法 运行 我在控制台应用程序中使用 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 可能更改时不会影响客户端.
客户端在其他机器上,而不是 运行正在运行该服务的机器。诸如来自 LAN 的手机 phone 或来自 LAN 的另一台笔记本电脑之类的东西,如果可能的话,将来也会在 LAN 之外。
在我的自托管服务的客户端中,这是一个 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 地址。
如果客户端在同一个 LAN 中,您可以通过名称而不是 IP 地址请求主机。
要查找主机名,请在主机上打开命令提示符并键入:hostname
它将显示主机名,例如myhost
。然后您可以将其请求为 http://myhost:8111
或任何端口。
对于 LAN 之外的客户端,您必须使用 DNS。如果可以的话,也可以通过 VPN 连接。
在你上面的例子中,你托管了一个侦听特定端口的服务,你是在声明无论请求如何找到服务器,直接 IP,DNS 解析或者你有什么,如果它是通过http 和端口 8111 然后通过您的代码发送它。
在您的第二个示例中,javascript,您正在发出请求。此请求不能说将此请求发送到端口 8111 上的任何 IP。看到区别了吗?
我假设为 javascript 提供服务的服务器也是您希望连接的服务器。如果是这样的话,有两个选择:
- 只需将 javascript 中的 uri 值更改为:
var uri = '/api/tests';
- 使您的 javascript 动态化,并让它使用生成包含 javascript 的网页的请求中的 Request.Url.Authority。由于我不知道您使用什么来交付 javascript. ,因此我将避免示例
如果不是这种情况,那么您需要了解客户需要知道在哪里制作此 api/test/{id}.