Je suis débutant à la WCF, mais j'essaie d'améliorer mon expérience. Et lors de la première étape, j'ai fait face au problème. J'ai créé le service WCF le plus simple. La liste de code: (tout le code dans un 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 console. Mais le débogage me donne l'exception: (au lieu du nombre :))
HTTP n'a pas pu enregistrer l'URL http: // +: 8000/HelloWCF / . Votre processus n'a pas de droits d'accès sur cet espace de nom (voir http://go.Microsoft.com/fwlink/?LinkId=7035 pour plus de détails).
Avez-vous déjà fait face à la même situation? Je serai heureux de voir tous les conseils.
Malheureusement, le lien dans le texte de l'exception, http://go.Microsoft.com/fwlink/?LinkId=7035 , est cassé. Cependant, cela conduisait habituellement à http://msdn.Microsoft.com/en-us/library/ms733768.aspx qui explique comment définir les autorisations.
Il vous informe fondamentalement 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 à l’aide de netsh
Par exemple: netsh http add ?
Donne de l'aide sur la commande http add
.
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". Ensuite, lorsque j'ai exécuté l'hôte, cela a fonctionné !!!
Cliquez avec le bouton droit sur Visual Studio> Exécuter en tant qu'administrateur> Ouvrez votre projet et exécutez le service. Il s'agit d'un problème lié au privilège.
Vous avez besoin de privilèges d’administrateur sur votre compte si votre ordinateur est connecté à un réseau local, vous appliquez certains privilèges d’administrateur à votre utilisateur. Sinon, vous devez démarrer ide en tant qu’administrateur ...
La chose simple à faire est de fermer votre environnement Visual Studio et de le rouvrir en utilisant "Exécuter en tant qu'administrateur". Il devrait maintenant fonctionner avec succès.
Dans Windows Vista et les versions ultérieures, le service HTTP WCF provoquait l'exception que vous avez mentionnée car un compte restreint n'avait pas le droit de le faire. C'est la raison pour laquelle cela a fonctionné lorsque vous l'avez exécuté en tant qu'administrateur.
Chaque développeur avisé doit utiliser un compte RESTRICTED plutôt qu'en tant qu'administrateur. Cependant, de nombreuses personnes vont dans le mauvais sens. C'est précisément la raison pour laquelle il existe tant d'applications que DEMANDER les autorisations d'administrateur alors qu'elles ne sont pas réellement nécessaires. Travailler à la manière paresseuse donne des solutions paresseuses J'espère que vous travaillez toujours dans un compte restreint (mes félicitations).
Il existe un outil (à partir de 2008 environ) appelé NamespaceManagerTool, si je me souviens bien, qui est censé accorder les autorisations utilisateur restreintes sur ces URL de service que vous définissez pour WCF. Je n'ai pas utilisé ça cependant ...
Votre exemple de code ne fonctionnera pas comme indiqué car vous avez oublié d'inclure une Console.ReadLine()
avant la ligne serviceHost.Close()
. Cela signifie que l'hôte est ouvert puis immédiatement fermé.
Autre que cela, il semble que vous ayez un problème de permission sur votre machine. Assurez-vous d'être connecté en tant que compte d'administrateur sur votre ordinateur. Si vous êtes un administrateur, il est possible que le service de publication World Wide Web (W3SVC) ne soit pas en cours d'exécution pour gérer les demandes HTTP.
Bien que j’ai pu résoudre ce problème sur un ordinateur en suivant les solutions d’autres utilisateurs, la commande netsh
ne résolvait pas le problème sur l’une de mes machines et, même si l’utilisateur actuel disposait de droits d’administrateur, je recevais toujours le "HTTP n'a pas pu enregistrer l'URL .... Votre processus n'a pas de droits d'accès sur cet espace de noms". Je partage donc ma solution au cas où vous ne l'obtenez toujours pas. travailler avec les autres solutions aussi.
Après avoir également tenté d'accorder des autorisations en écriture à l'utilisateur situé dans le répertoire physique de mon site Web, sans succès, j'ai finalement décidé d'essayer de modifier IIS paramètres .
Comme le montrent les images ci-dessous, j'ai configuré les informations d'identification du chemin d'accès physique de mon site Web afin de vous connecter en tant qu'utilisateur spécifique, qui était un compte administrateur avec DOMAIN\nom d'utilisateur et mot de passe, et cela a suffi à faire disparaître l'erreur.