197 votes

HTTP n'a pas pu enregistrer l'URL http://+:8000/HelloWCF/. Votre processus n'a pas de droits d'accès à cet espace de nom.

Je suis un débutant dans WCF, mais j'essaie d'améliorer mon expérience. Et dès la première étape, j'ai rencontré le problème. J'ai créé le service WCF le plus simple. Le listing du code : (tout le code dans un seul fichier)

using System;
using System.ServiceModel;

namespace EssentialWCF
{
    [ServiceContract]
    public interface IStockService
    {
        [OperationContract]
        double GetPrice(string ticker);
    }

    public class StockService : IStockService
    {
        public double GetPrice(string ticker)
        {
            return 94.85;
        }
    }

    class Service
    {
        static void Main(string[] args)
        {
            ServiceHost serviceHost = new ServiceHost(typeof(StockService),
                                                        new Uri("http://localhost:8000/HelloWCF"));

            serviceHost.AddServiceEndpoint(typeof(IStockService), new BasicHttpBinding());
            serviceHost.Open();

            Console.WriteLine("To continue press ENTER");

            serviceHost.Close();
        }
    }
}

Ce serait le service qui me donnerait un numéro via la console. Mais le débogage me donne l'exception : (au lieu d'un numéro :) )

HTTP n'a pas pu enregistrer l'URL http://+:8000/HelloWCF/. Votre processus n'a pas de droits d'accès à cet espace de nom.

Avez-vous déjà été confronté à la même situation ? Je serai heureux de voir tous les conseils.

0 votes

Je suis confus. Le texte mis en évidence par le HTML est-il censé faire partie du code ?

1 votes

regardez ici pour d'autres options [ stackoverflow.com/questions/885744/

252voto

Bryan Points 581

Malheureusement le lien dans le texte d'exception, http://go.microsoft.com/fwlink/?LinkId=70353 est cassé. Cependant, il conduisait auparavant à http://msdn.microsoft.com/en-us/library/ms733768.aspx qui explique comment définir les permissions.

Il vous informe essentiellement d'utiliser la commande suivante :

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

Vous pouvez obtenir plus d'aide sur les détails en utilisant l'aide de netsh

Par exemple : netsh http add ?

Donne de l'aide sur le http add commandement.

3 votes

Cette méthode est également utile pour configurer les autorisations requises sur un serveur de test automatisé.

9 votes

Veillez à exécuter la commande à partir d'une invite de commande d'administrateur.

5 votes

Si vous n'êtes pas sur un domaine, utilisez simplement COMPUTER_NAME\USER_NAME dans la commande ci-dessus.

198voto

J'ai fermé Visual Studio IDE et je l'ai rouvert en faisant un clic droit sur l'icône Visual Studio et en disant "Exécuter en tant qu'administrateur", puis quand j'ai exécuté l'hôte, cela a fonctionné !!!

17 votes

Tout d'abord, il s'agit d'une mauvaise pratique, bien que Visual Studio ne laisse guère de choix à cet égard. Deuxièmement, le problème demeure à d'autres étapes (par exemple, le déploiement). Voir la réponse de Bryan ou blogs.msdn.com/b/paulwh/archive/2007/05/04/

4 votes

Bon sang ! Fichu MS, qui fabrique des fonctionnalités différentes qui se combattent elles-mêmes. Autant pour le "moindre privilège".

1 votes

Meilleure pratique ou pas, c'est sur MS. Pourquoi est-ce que WCF/.NET est si spécial qu'il a besoin d'un cerceau de plus à sauter à travers ? Si j'écris un service dans Java fonctionnant sur Windows, bang il fonctionne localement. Si je veux le rendre public, j'ajuste le pare-feu, le commutateur, le routeur, etc.

15voto

Pramod Lawate Points 49

Vous avez besoin d'un privilège d'administrateur pour votre compte. Si votre machine est dans un réseau local, vous devez appliquer un privilège d'administrateur à votre utilisateur, sinon vous devez démarrer l'application en tant qu'administrateur...

2 votes

C'est ce que j'ai eu besoin de faire pour mon service WCF Windows. J'utilisais un nouveau compte de domaine pour exécuter le service sur une machine de construction. Mon service démarrait et lançait ensuite cette exception. Une fois que je lui ai donné les droits d'administrateur, il a fonctionné parfaitement.

0 votes

Cela a résolu le problème pour moi. Il suffit de faire un clic droit sur le service, et dans l'onglet "se connecter" choisir "Compte système local".

15voto

Mahesh Points 21

La chose la plus simple à faire est de fermer votre environnement Visual Studio et de l'ouvrir à nouveau en utilisant "Exécuter en tant qu'administrateur". Il devrait maintenant s'exécuter avec succès.

19 votes

Courir en tant qu'administrateur ne fait qu'éviter les problèmes, ça ne les résout pas.

6voto

Lord of Scripts Points 601

Dans Windows Vista et les versions ultérieures, le service HTTP WCF provoque l'exception que vous avez mentionnée parce qu'un compte restreint n'a pas le droit de le faire. C'est la raison pour laquelle cela fonctionne lorsque vous l'exécutez en tant qu'administrateur.

Tout développeur sensé doit utiliser un compte RESTREINT plutôt qu'un compte d'administrateur, mais beaucoup de gens font fausse route et c'est précisément la raison pour laquelle il existe tant d'applications qui EXIGENT des droits d'administrateur alors qu'ils ne sont pas vraiment nécessaires. Travailler de manière paresseuse aboutit à des solutions paresseuses. J'espère que vous travaillez toujours dans un compte restreint (mes félicitations).

Il existe un outil (datant de 2008 environ) appelé NamespaceManagerTool, si je me souviens bien, qui est censé accorder les droits d'utilisateur restreint sur ces URL de service que vous définissez pour WCF. Je ne l'ai pas utilisé cependant...

0 votes

L'outil auquel vous pensez s'appelle Http Namespace Manager. Il n'est pas supporté par MS mais il est disponible ici : blogs.msdn.com/b/paulwh/archive/2007/05/04/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X