OWIN 服务在网络中不可见

问题描述 投票:0回答:2

我使用

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");
并为此应用程序的可执行文件添加新的防火墙规则(允许入站)

c#
2个回答
5
投票
_webApp = WebApp.Start<StartOwin>("http://*:8511");

不必担心特定的 IP 或主机名。只需使用上面的方法将其绑定到“any”即可。


0
投票

对于任何有与此案例类似问题的人。 我也遇到过类似的问题,但问题不是防火墙。

我使用“http://+:PORT”来设置具有任何 IP 的侦听器,甚至来自外部地址:

_webApp = WebApp.Start<StartOwin>("http://+:8511");

重要的部分是(我必须确保我的服务具有管理员权限): 为此,请转到服务管理器,选择您的服务,右键单击>属性。 转到“登录”选项卡并选择本地系统帐户。

在我的例子中,该服务使用的特定帐户无法获得管理员权限,并且收到“调用目标已引发异常”的消息。无法将我的网络服务与 IP 绑定。

之后,我可以在本地(使用 localhost 或 127.0.0.1)访问我的 Web 服务,并通过网络 IP 从外部访问。

© www.soinside.com 2019 - 2024. All rights reserved.