Erreur WCF : Le ChannelDispatcher ne peut pas ouvrir son IChannelListener

EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 - 6 janv. 2009 à 19:06
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 - 12 janv. 2009 à 22:28
Bonjour,

Je viens de créer un service WCF mais pas moyen de le faire démarrer par mon application hote (application console). Il me retourne l'erreur suivante à l'appel de la méthode Open() de mon ServiceHost :

Le ChannelDispatcher à « http://localhost:5000/wcf » avec le ou les contrats « "IMessenger" » ne peut pas ouvrir son IChannelListener.

Impossible de savoir d'ou cela provient et je ne trouve rien à ce sujet sur le net.
Voici mon fichier app.config (hote) :

<?

xml
version= "1.0"encoding="utf-8" ?>
<
configuration>
<
system.serviceModel>
<
services>
<
servicename="Axiome.Service.Messenger.Messenger"behaviorConfiguration="DbMessengerBehavior">
<
host>
<
baseAddresses>
<
addbaseAddress="http://localhost:5000/wcf"/>
</
baseAddresses>
</
host>
<
endpointbinding="wsHttpBinding" bindingConfiguration="DbMessengerBinding" contract ="IBLL.Messenger.IMessenger"/>
</
service>
</
services>
<
bindings>
<
wsHttpBinding>
<
bindingname="DbMessengerBinding">
<
securitymode="Message">
<
messageclientCredentialType="UserName"/>
</
security>
</
binding>
</
wsHttpBinding>
</
bindings>
<
behaviors>
<
serviceBehaviors>
<
behaviorname="DbMessengerBehavior">
<
serviceMetadatahttpGetEnabled="true"/>
<
serviceDebugincludeExceptionDetailInFaults="false"/>
<
serviceCredentials>
<
userNameAuthenticationuserNamePasswordValidationMode="Custom"customUserNamePasswordValidatorType="Axiome.Service.Messenger.Credential, Axiome"/>
</
serviceCredentials>
</
behavior>
</
serviceBehaviors>
</
behaviors>
</
system.serviceModel>
</
configuration>

C'est depuis que j'ai voulu rajouter un validateur de nom et de mot de passe personnalisé que j'ai cette erreur. Si je supprime bindingConfiguration
="DbMessengerBinding", ça fonctionne.

Si quelqu'un a une idée, je suis preneur !

Merci d'avance à tous.

 

4 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
6 janv. 2009 à 22:14
Bonsoir,

Tu peux nous coller le message d'erreur précis ainsi que le StackTrace. 

Si lorsque tu supprimes la configuration du Binding cela fonctionne, cela vient de cette configuration.  

<binding
name="DbMessengerBinding
">
     <
security mode="Message">
          <
message clientCredentialType="UserName"/>
     </
security>
</binding
>

ll me semble déjà avoir mis en place cette configuration, je me souviens malheureusement pas de toute la configuration (et j'ai pas le temps de rouvrir ce projet), cela me semble OK.
Essaye de mettre du https au niveau de la baseAdress, tu peux également essayer de t'amuser en mettant le mode TransportWithMessageCredential

Tu peux aussi regarder au niveau de ce document qui explique les différentes configuration de securité possible : http://www.codeplex.com/WCFSecurityGuide

<hr />Cyril - MVP ASP.net - MCPD ASP.net & MCTS SQL - Consultant indépendant
0
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 1
6 janv. 2009 à 23:34
Bonsoir,

Voici : "  à System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout)\r\n   à System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)\r\n   à System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)\r\n   à System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)\r\n   à System.ServiceModel.Channels.CommunicationObject.Open()\r\n   à DbMessengerHost.Program.Main(String[] args) dans C:\\Documents and Settings\\Yann\\Mes documents\\Visual Studio 2008\\Projects\\Axiome\\Test\\DbMessengerHost\\Program.cs:ligne 18\r\n   à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)\r\n   à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)\r\n   à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()\r\n   à System.Threading.ThreadHelper.ThreadStart_Context(Object state)\r\n   à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)\r\n   à System.Threading.ThreadHelper.ThreadStart()"

Je vais regarder ton lien, merci !
0
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 1
7 janv. 2009 à 10:52
Bonjour,

Une semaine que je suis sur ce problème, toujours rien c'est désespérant.
Je met ça de côté pour le moment, si quelqu'un trouve quelque chose qui pourrait m'aider, n'hésitez pas !
Si je trouve la solution, je vous en ferais part.

Merci à tous d'avance !
 
0
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 1
12 janv. 2009 à 22:28
Bonsoir à tous,

J'ai trouver !!!!

Apparament le service doit prouver au client que c'est bien lui (dans le cas de cette configuration).
J'ai donc rajouté :

<
serviceCredentials>
<
userNameAuthentication
userNamePasswordValidationMode= "Custom"customUserNamePasswordValidatorType="Axiome.Service.Messenger.Credential, Axiome"/>
<
serviceCertificate
findValue ="NomDeVotreCertificat"x509FindType= "FindBySubjectName"storeLocation="LocalMachine"storeName="My"
/>
</
serviceCredentials
>

Aprés avoir créé un certificat grâce à cette ligne de commande (en utilisant le kit de développement SDK) :
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN =NomDeVotreCertificat -sky exchange –pe

Par contre si quelqu'un pouvait me donner plus d'explication, ce serait cool !

Merci d'avance !

 
0
Rejoignez-nous