“La configuration des Services avec des points de terminaison” Démonstration Échoue Pour Moi (Microsoft/point de terminaison.tv/Pluralsight)
Je suis en train de suivre les vidéos de démonstration sur les débutants à WCF page sur MSDN.
La première vidéo a travaillé plus ou moins fines. Je suis maintenant vers la fin de la deuxième vidéo. Je suis à l'aide de VS2010 /.NET 4.0, alors que la vidéo semble être à l'aide de VS2008 (je suis en supposant que .NET 3.5, mais je ne me souviens pas).
Je suis en utilisant la démonstration suivante
Nous avons ajouté plus de 3 points de fin: une plaine http, net.tcp, et net.la pipe. Lorsque j'essaie d'exécuter le projet, le Web service ne parvient pas à démarrer.
System.InvalidOperationException: Cannot load the X.509 certificate identity specified in the configuration.
at System.ServiceModel.Description.ConfigLoader.LoadIdentity(IdentityElement element)
at System.ServiceModel.Description.ConfigLoader.LoadServiceDescription(ServiceHostBase host, ServiceDescription description, ServiceElement serviceElement, Action`1 addBaseAddress)
at System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader, ServiceDescription description, ServiceElement serviceSection)
at System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader, ServiceDescription description, String configurationName)
at System.ServiceModel.ServiceHostBase.ApplyConfiguration()
at System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses)
at System.ServiceModel.ServiceHost.InitializeDescription(Type serviceType, UriSchemeKeyedCollection baseAddresses)
at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses)
at Microsoft.Tools.SvcHost.ServiceHostHelper.CreateServiceHost(Type type, ServiceKind kind)
at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)
Basé sur mon Google-fu, je suis tombé sur ce thread: "Impossible de charger le X. 509 certificat d'identité spécifié dans la configuration"
Je n'avais vraiment pas envie de s'impliquer dans des certificats pour l'instant puisque je suis encore en train d'expérimenter avec les bases j'ai donc suivi les conseils dans ce post et juste ajouté le <dns value="localhost" />
tag. L'exception des modifications:
Please try changing the HTTP port to 8732 or running as Administrator.
System.ServiceModel.AddressAccessDeniedException: HTTP could not register URL http://+:8080/EvalService/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details). ---> System.Net.HttpListenerException: Access is denied
at System.Net.HttpListener.AddAllPrefixes()
at System.Net.HttpListener.Start()
at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
--- End of inner exception stack trace ---
at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
at System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener channelListener)
at System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback)
at System.ServiceModel.Channels.TransportChannelListener.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.HttpChannelListener.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.DatagramChannelDemuxer`2.OnOuterListenerOpen(ChannelDemuxerFilter filter, IChannelListener listener, TimeSpan timeout)
at System.ServiceModel.Channels.SingletonChannelListener`3.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Security.NegotiationTokenAuthenticator`1.OnOpen(TimeSpan timeout)
at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Security.CommunicationObjectSecurityTokenAuthenticator.Open(TimeSpan timeout)
at System.ServiceModel.Security.SecurityUtils.OpenCommunicationObject(ICommunicationObject obj, TimeSpan timeout)
at System.ServiceModel.Security.SecurityUtils.OpenTokenAuthenticatorIfRequired(SecurityTokenAuthenticator tokenAuthenticator, TimeSpan timeout)
at System.ServiceModel.Security.SecurityProtocolFactory.Open(String propertyName, Boolean requiredForForwardDirection, SecurityTokenAuthenticator authenticator, TimeSpan timeout)
at System.ServiceModel.Security.SymmetricSecurityProtocolFactory.OnOpen(TimeSpan timeout)
at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Security.SecurityProtocolFactory.Open(Boolean actAsInitiator, TimeSpan timeout)
at System.ServiceModel.Security.SecurityListenerSettingsLifetimeManager.Open(TimeSpan timeout)
at System.ServiceModel.Channels.SecurityChannelListener`1.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Security.SecuritySessionSecurityTokenAuthenticator.OnOpen(TimeSpan timeout)
at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Security.CommunicationObjectSecurityTokenAuthenticator.Open(TimeSpan timeout)
at System.ServiceModel.Security.SecurityUtils.OpenCommunicationObject(ICommunicationObject obj, TimeSpan timeout)
at System.ServiceModel.Security.SecurityUtils.OpenTokenAuthenticatorIfRequired(SecurityTokenAuthenticator tokenAuthenticator, TimeSpan timeout)
at System.ServiceModel.Security.SecuritySessionServerSettings.OnOpen(TimeSpan timeout)
at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Security.SecuritySessionServerSettings.Open(TimeSpan timeout)
at System.ServiceModel.Security.SecurityListenerSettingsLifetimeManager.Open(TimeSpan timeout)
at System.ServiceModel.Channels.SecurityChannelListener`1.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open()
at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)
System.Net.HttpListenerException (0x80004005): Access is denied
at System.Net.HttpListener.AddAllPrefixes()
at System.Net.HttpListener.Start()
at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen()
Donc, j'ai essayé de faire ce qu'il a dit: changer le port à 8732, mais l'exception est encore jetés, cette fois en disant Please try changing the HTTP port to 8732...HTTP could not register URL http://+:8732/EvalService/...
. 😛
J'ai essayé de commenter le nouveau point de fin en vain. Même celles à l'origine échouer avec cette erreur. N'a pas d'importance si je les ai mis en arrière à l'original du port [pas si] 1337.
Voici l'Application.config, et rien ne sort du lot comme problématique:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<system.serviceModel>
<services>
<service name="EvalServiceLibrary.EvalService">
<clear />
<endpoint address="ws" binding="wsHttpBinding" contract="EvalServiceLibrary.IEvalService"
listenUriMode="Explicit">
<identity>
<dns value="localhost" />
<certificateReference storeName="My" storeLocation="LocalMachine"
x509FindType="FindBySubjectDistinguishedName" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"
listenUriMode="Explicit">
<identity>
<dns value="localhost" />
<certificateReference storeName="My" storeLocation="LocalMachine"
x509FindType="FindBySubjectDistinguishedName" />
</identity>
</endpoint>
<endpoint address="basic" binding="basicHttpBinding" contract="EvalServiceLibrary.IEvalService"
listenUriMode="Explicit">
<identity>
<dns value="localhost" />
<certificateReference storeName="My" storeLocation="LocalMachine"
x509FindType="FindBySubjectDistinguishedName" />
</identity>
</endpoint>
<endpoint address="net.tcp://localhost:8888/EvalService" binding="netTcpBinding"
contract="EvalServiceLibrary.IEvalService" listenUriMode="Explicit">
<identity>
<dns value="localhost" />
<certificateReference storeName="My" storeLocation="LocalMachine"
x509FindType="FindBySubjectDistinguishedName" />
</identity>
</endpoint>
<endpoint address="net.pipe://localhost/EvalService" binding="netNamedPipeBinding"
bindingConfiguration="" contract="EvalServiceLibrary.IEvalService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/EvalService" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Ce qui est mal /comment puis-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
J'ai aussi suivi la même webcast et avaient les mêmes problèmes. J'ai eu autour de la cert question en commentant ces entrées comme suggéré par d'autres.
J'ai corrigé le "s'il vous Plaît essayez de changer le numéro de port HTTP pour 8732 ou exécutant en tant qu'Administrateur" en ajoutant "Design_Time_Addresses" dans mon url
Ne fonctionne pas
Fonctionne!
Un semblant de solution de travail pour la dernière des deux problèmes ci-dessus (l'
HTTP could not register URL
un) peut être trouvé dans la VS2010 Kit de Formation posté dans les commentaires de Gabobcat de la réponse (par lui).Dans le 4ème exercice, "Ex4-ServiceDiscovery", vous avez ce qui semble être une application de chat qui utilise les services WCF pour communiquer entre deux clients. Il utilise une fonctionnalité de détection de trouver des pairs sur le réseau. Longue histoire courte, la même exception se produit lorsque vous essayez d'exécuter l'application terminée (après remplissage dans la découverte des événements comme prévu dans l'exercice). Livré avec le Kit de Formation est un couple de scripts batch (qui AFAICT utilise Microsoft licence "open source", donc je devrais être en mesure de partager ces scripts) pour définir ou supprimer "URL Acl". Dans la pratique, il semble qu'un seul (utiles) de votre commande:
Fichier: AddURLACL.cmd
Fichier: DelURLACL.cmd
Évidemment, la
netsh
commandes sont les seuls qui comptent. L'exemple du projet consiste à utiliser la commande suivante (à partir d'un "Exécuter en tant qu'Administrateur" fenêtre d'Invite de Commande) pour "fixer" cette exception:(J'ai utilisé le chemin d'accès absolu juste pour vous montrer où dans le Kit de Formation vous pourriez trouver ces scripts; personnellement, j'ai été dans le WhatsNewInWCF4\répertoire Source quand je l'ai fait)
La chaîne de 8000 ne se produit 1 fois tout au long de ce projet:
Il semble que le port 8000 est le port que le chat les clients essaient de lancer un service d'accueil sur (ne me demandez pas comment ils ont tous la partager...je suppose que le
ServiceHost
classe qu'ils utilisent est assez intelligent pour réutiliser un service existant,...).Je n'ai pas expérimenté à fond avec cela, mais il semble avoir "réparé" mon EvalService projet (quand j'ai changé le port 8000). Actuellement avec la plupart des points de terminaison enlevé (seulement le
basicHttpBinding
d'extrémité à gauche) et lebaseAddress
ensemble delocalhost:8000
.Laissez-moi savoir si cela fonctionne pour vous aussi.
J'ai été frustated avec le même problème. J'ai enfin trouvé la solution par moi-même en exécutant Visual Studio en tant qu'Administrateur en cliquant à droite de Visual Studio 2010 et en choisissant "Exécuter en tant Qu'Administrateur".
Le problème est dans votre configuration. Vous référencez les certificats dans vos points de terminaison. Soit vous les enlever:
Ou vous placez certains certificats dans votre magasin de certificats. Je vous conseille d'enlever le "identité" des sections de configuration à ce point, jusqu'à ce que vous en apprendre un peu plus abour WCF. Essayez de rester juste sur l'extrémité de base de la configuration d'abord, et de travailler votre chemin à partir du point où vous comprenez les bases de la WCF. WCF vous donne une grande (très grande) de l'ensemble des options de configuration selon vos besoins spécifiques.
Peut-être ces liens vous aider à aller dans WCF mieux que les vidéos que vous avez été à regarder:
Guide du débutant pour Windows Communication Foundation
Qu'Est-Ce Que Windows Communication Foundation
Espère que cette aide.
<identity>
balises de se débarrasser de l'X. 509 erreur de certificat(s), mais je suis toujours à gauche avec la liaison d'erreur(s). Je pense que le<identity>
sections ont été ajoutées automatiquement par Visual Studio (sans aucune action spéciale par moi), donc il ne semble pas intuitif de se débarrasser d'eux pour cette démo.<basicHttpBinding>
(avec le<identity>
commenté), puis modifiez la<baseAddress>
àhttp://localhost/EvalService
, j'obtiens toujours la dernière exception de l'OP: accès refusé, ne pas les droits à l'espace de noms, etc...ServiceContract
), deux classes (uneDataContract
et une mise en œuvre de laServiceContract
interface), et une Application.config. 🙂 Donc si vous faisiez référence au chemin d'accès à un .svc fichier je n'en ai pas. Sinon, je suis tout confus. 😛 Ce qui me dérange, c'est que je suis en suivant les débutants vidéo sur les débutants site Web! \o/ C'est pas comme si je vais au bout d'un niveau assez avancé. Je pense que c'est l'essentiel..Pensé que je voudrais ajouter une mise à jour consolidée de réponse à partir de ce que je lisais.
Alors que nous pouvons tous nous rendre de grands efforts pour accorder des autorisations avec le certificat, la plupart des gens qui lisent ce ne sont vraiment que de vouloir obtenir la WCF les points de terminaison et de courir le plus vite possible.
Donc un peu de choix.
Soit de ce semble être le plus rapide des moyens de se lever et courir avec cette question.
Exécuter en tant qu'administrateur, cliquez-droit sur Visual Studio et sélectionnez Exécuter en tant qu'Administrateur dans le menu contextuel.
Pour exécuter en tant qu'administrateur de tous les temps, à droite, cliquez sur Visual Studio, puis cliquez sur propriétés dans le menu contextuel
Arrivés à l'onglet compatibilité, puis sélectionnez Exécuter ce programme en tant qu'administrateur.