web-dev-qa-db-fra.com

OWIN et urlacl auto-hébergés

J'ai créé une application Nancy/SignalR auto-hébergée auto-hébergée dans OWIN en utilisant Microsoft.Owin.Host.HttpListener et Microsoft.Owin.Hosting

Les choses fonctionnent parfaitement bien localement, mais dès que j'essaie d'utiliser autre chose que localhost pour accéder à l'application, j'obtiens un HTTP Error 503. The service is unavailable Erreur. Je ne peux même pas accéder à l'application en utilisant 127.0.0.1 ou le nom de la machine.

J'ai essayé d'ajouter le port à urlacl en utilisant

http add urlacl http://*:8989/ user=EVERYONE mais ne semble rien faire.

voici les options de démarrage OWIN que j'ai essayées,

        var options = new StartOptions
        {
            Url = "127.0.0.1",
            App = GetType().AssemblyQualifiedName,
            Port = _configFileProvider.Port
        };

    var options = new StartOptions
        {
            App = GetType().AssemblyQualifiedName,
            Port = _configFileProvider.Port
        };

voici le code source du fichier qui démarre et arrête le serveur https://github.com/NzbDrone/NzbDrone/blob/vnext/NzbDrone/Owin/OwinHostController.cs

24
kay.one

il s'avère donc que vous devez passer une URL dans StartOptions au même format que l'urlacl.

Changer les options de démarrage pour le code ci-dessous a résolu le problème. maintenant, l'application est accessible sur le réseau.

  var options = new StartOptions("http://*:8989")
  {
      ServerFactory = "Microsoft.Owin.Host.HttpListener"
  };
26
kay.one

Je passe de nombreuses heures à résoudre un problème similaire sur Windows 8.1.

    StartOptions options = new StartOptions();

    options.Urls.Add("http://localhost:9000");
    options.Urls.Add("http://127.0.0.1:9000");
    options.Urls.Add("http://192.168.0.102:9000");
    options.Urls.Add(string.Format("http://{0}:9000", Environment.MachineName));

    WebApp.Start<Startup>(options);

Je n'ai pas pu écouter ou j'obtenais une erreur 503 ...

Si vous souhaitez écouter sur plusieurs adresses IP, chaque adresse a besoin de son propre enregistrement urlacl:

Ne marche pas:

    netsh http>add urlacl http://+:9000/ user=EveryOne    

D'ACCORD:

    netsh http>add urlacl http://localhost:9000/ user=EveryOne
    netsh http>add urlacl http://127.0.0.1:9000/ user=EveryOne
    etc.

Après avoir ajouté une réservation pour chaque adresse individuellement, tout fonctionne bien.

11
Milan Švec

Grâce aux informations fournies par @ kay.one, j'ai pu accéder à mon API Web 2.2 auto-hébergée (OWIN/Katana, application console) à partir de la même machine via l'adresse IP. Cependant, il suffit de le consolider en une simple étape par étape:

  1. Dans Main de Program.cs (pour l'application console): WebApp.Start<Startup>("http://*:8080");
  2. À partir de l'invite de commandes Windows (exécuté en tant qu'administrateur), entrez netsh http add urlacl http://*:8080/ user=EVERYONE
  3. Accédez à Pare-feu Windows avec fonctions avancées de sécurité et ajoutez une règle entrante qui ouvre TCP port 8080

Vous devriez alors pouvoir accéder à partir d'une autre machine en utilisant l'adresse IP ou le nom de l'ordinateur.

Avis de non-responsabilité: je ne suis pas un expert en sécurité, donc je ne connais pas les implications de sécurité de faire cela.

9
BCA