OWIN自托管WebAPI仅本地可访问,公网IP无法连接排查
问题:OWIN自托管WebAPI无法通过公网IP访问(AWS Windows Server环境)
- 环境:AWS Windows Server 2022 Datacenter build 21H2,部署基于.NET Framework 4.8的OWIN自托管WebAPI;本地测试机为Windows 10
- 当前状态:WebAPI仅能通过
localhost:port/endpoint访问,本地无法通过机器名+端口访问,公网IP无论本地还是外部网络均无法访问 - 排除项:已关闭所有防火墙,同一端口部署Tomcat、Flask均可正常从外部访问,说明防火墙、端口、AWS内部VPS防火墙均无问题
- 排查历史:耗时近两周,尝试过相关解决方案但未解决
复现代码
Startup类代码
public class WebServerStartup { public void Configuration(IAppBuilder appBuilder) { HttpConfiguration config = new HttpConfiguration(); appBuilder.UseCors(CorsOptions.AllowAll); config.MapHttpAttributeRoutes(); //Don't miss this config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); ((Newtonsoft.Json.Serialization.DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.ContractResolver).IgnoreSerializableAttribute = true; appBuilder.UseWebApi(config); } }
托管启动代码(CASE 1)
private void ButtonHost_OnClick(object sender, RoutedEventArgs e) { try { // CASE 1 Tried StartOptions options = new StartOptions(); options.Urls.Add($"http://localhost:{txtProt.Text.Trim()}"); options.Urls.Add($"http://127.0.0.1:{txtProt.Text.Trim()}"); options.Urls.Add($"http://{Environment.MachineName}:{txtProt.Text.Trim()}"); WebApp.Start<WebServerStartup>(options: options); } catch (Exception exception) { TextBlockStatus.Text = JsonConvert.SerializeObject(exception); } }
已执行的配置操作
- 通过管理员命令提示符执行URL预留:
netsh http add urlacl url=http://AMAZ-V5775TY37B:9989/ user=Administrator
其他尝试过的启动配置
//CASE 2 无StartOptions,本地和AWS内可访问,但公网IP不行 WebApp.Start<Startup>("http://*:8080"); //CASE 3 本地和AWS内可访问 WebApp.Start<Startup>("http://localhost:8080"); //CASE 4 本地测试机可访问,但AWS上不行 WebApp.Start<Startup>("http://localip:8080"); // 192.168.1.x
核心疑问
同一公网IP和端口下Tomcat、Flask无需额外配置即可访问,但OWIN自托管WebAPI始终无法通过公网IP访问,即使以管理员身份运行应用仍报ERROR: connection refused。是否遗漏了OWIN的相关配置?
内容的提问来源于stack exchange,提问作者Venkat B
相关产品推荐
相关产品推荐

