我使用创建了 C# 控制台应用程序OWIN,但在本地主机之外的应用程序可见性方面存在问题。例如,如果我在 URL 中使用 localhost 发出 POST 请求,一切正常,但是当我将邮递员中的 URL 替换为我的全局 IP 地址时,它停止工作。端口已打开,我可以从外部计算机 ping 服务器。早期基于 IIS 的应用程序在此端口上使用此全局 IP 地址和端口运行良好。
_webApp = WebApp.Start<StartOwin>("http://localhost:8511");
Run Code Online (Sandbox Code Playgroud)
上面的行应该包含我的全局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);
}
}
Run Code Online (Sandbox Code Playgroud)
#更新 我已将应用程序的端口更改为 8512,完全解锁该端口并发出以下 POST 请求:
#更新2
设置
_webApp = WebApp.Start<StartOwin>("http://*:8511");
并关闭整个防火墙后,它按预期工作,所以这是网络问题(serverfault.com)
解决方案
_webApp = WebApp.Start<StartOwin>("http://*:8511");
并为此应用程序的可执行文件添加新的防火墙规则(允许入站)
_webApp = WebApp.Start<StartOwin>("http://*:8511");
Run Code Online (Sandbox Code Playgroud)
不必担心特定的 IP 或主机名。只需使用上面的方法将其绑定到“any”即可。