我使用
OWIN
创建了 C# 控制台应用程序,但在本地主机之外的应用程序可见性方面存在问题。例如,如果我在 URL 中使用 localhost 发出 POST 请求,一切正常,但是当我将邮递员中的 URL 替换为我的全局 IP 地址时,它停止工作。端口已打开,我可以从外部计算机 ping 服务器。早期基于 IIS 的应用程序在具有此全局 IP 地址和端口的端口上运行良好。
_webApp = WebApp.Start<StartOwin>("http://localhost:8511");
上面的行应该包含我的全局IP,或者它可以是具有特定端口的本地主机?
完整代码:
public class Program
{
public static int Main(string[] args)
{
return (int)HostFactory.Run(x =>
{
x.StartAutomatically();
x.Service<OwinService>(s =>
{
s.ConstructUsing(() => new OwinService());
s.WhenStarted(service => service.Start());
s.WhenStopped(service => service.Stop());
});
});
}
}
public class OwinService
{
private IDisposable _webApp;
public void Start()
{
_webApp = WebApp.Start<StartOwin>("http://localhost:8511");
}
public void Stop()
{
_webApp.Dispose();
}
}
public class StartOwin
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
}
#更新 我已将应用程序的端口更改为 8512,完全解锁该端口并发出以下 POST 请求:
#更新2
设定后
_webApp = WebApp.Start<StartOwin>("http://*:8511");
并关闭整个防火墙它按预期工作,所以这是网络问题(serverfault.com)
解决方案
_webApp = WebApp.Start<StartOwin>("http://*:8511");
并为此应用程序的可执行文件添加新的防火墙规则(允许入站)
_webApp = WebApp.Start<StartOwin>("http://*:8511");
不必担心特定的 IP 或主机名。只需使用上面的方法将其绑定到“any”即可。
对于任何有与此案例类似问题的人。 我也遇到过类似的问题,但问题不是防火墙。
我使用“http://+:PORT”来设置具有任何 IP 的侦听器,甚至来自外部地址:
_webApp = WebApp.Start<StartOwin>("http://+:8511");
重要的部分是(我必须确保我的服务具有管理员权限): 为此,请转到服务管理器,选择您的服务,右键单击>属性。 转到“登录”选项卡并选择本地系统帐户。
在我的例子中,该服务使用的特定帐户无法获得管理员权限,并且收到“调用目标已引发异常”的消息。无法将我的网络服务与 IP 绑定。
之后,我可以在本地(使用 localhost 或 127.0.0.1)访问我的 Web 服务,并通过网络 IP 从外部访问。