【发布时间】:2018-04-10 22:17:10
【问题描述】:
我正在使用 Owin 和 Topshelf 来自托管一个 ASP.net Web Api。
我可以在自托管它的设备上通过 localhost 和 127.0.0.1 访问它。 这个想法是,任何连接到网络并安装了我的计算机或移动应用程序的设备都能够与该 Web api 通信,以从挂在后面的数据库中请求/更新/删除数据。
我遇到的问题是我无法找出服务实际运行的内部 IP。我无法控制/查看它安装到的网络(通过我的代码除外),这意味着我不知道 ip 或主机名可能是什么,只知道端口号(在任何其他未托管它的设备上)。
我尝试添加如下所示的自定义网址
StartOptions options = new StartOptions();
options.Urls.Add("http://localhost:6969");
options.Urls.Add("http://127.0.0.1:6969");
options.Urls.Add(string.Format("http://{0}:6969", Environment.MachineName));
options.Urls.Add("http://+:6969");
显然 localhost 和 127.0.0.1 不适用于同一网络上的远程设备。 MachineName 的问题是我对机器的名称也没有发言权,这意味着这可能是任何东西。我假设通配符允许我在端口 6969 上发送请求并且主机会捕获它,遗憾的是事实并非如此。
这让我有点问题,我现在有一个自托管的 Web api,在一台具有随机 ip 和名称的机器上,它需要被同一网络上的其他设备访问,用户不是能够手动输入ip,我不能在主机上强制输入一个名字。这一切都让我处于一种情况,我不确定我还能尝试什么,或者是否有可能在没有人为干扰的情况下到达主机。
编辑:我确实遇到过类似
的东西网络广播地址 这应该以某种方式允许我从设备发送消息,并让服务器用它的 ip 响应。不知道如何将它应用到我的自托管网络 API。
【问题讨论】:
-
能否不让服务将其地址报告给另一个发现服务,让客户端查询发现服务以获取 Web API 服务的地址?
-
@junkangli 请详细说明,我不熟悉发现服务。我是否想以某种方式运行另一个自托管服务,这是可发现的?
标签: c# asp.net-web-api windows-services owin .net-4.7.1