Bonjour,

pour vous mettre dans le bain: je galère.

Voilà ce que je veux faire:
un service WCF, qui refuse l'accès à certaines fontions de mon service, si l'utilisateur n'est pas identifié, j'utilise une authentification membership, mais je voudrais que celle-ci ne soit pas obligatoire, si je n'en ai pas besoin

J'utilise un client winforms pour me connecter.

Voilà les configurations de mon service:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<system.serviceModel>
   <bindings>
     <wsHttpBinding>
       <!-- Set up a binding that uses UserName as the client credential type -->
       <binding name="MembershipBinding">
         <security mode ="Message">
           <message clientCredentialType ="UserName"/>
         </security>
       </binding>
     </wsHttpBinding>
   </bindings>
 
 
 
  <behaviors>
   <serviceBehaviors>
    <behavior name="GestionDocBehavior">
      <serviceCredentials>
        <serviceCertificate findValue="MyServerCert" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
          <userNameAuthentication userNamePasswordValidationMode ="MembershipProvider" membershipProviderName ="FrancisetJFMembershipProvider"/>
      </serviceCredentials>
      <serviceAuthorization principalPermissionMode ="UseAspNetRoles" roleProviderName ="FrancisetJFRoleProvider" /> 
     <serviceMetadata httpGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="True" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
 
  <services>
    <service behaviorConfiguration="GestionDocBehavior" name="GestionDoc">
      <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MembershipBinding" contract="IGestionDoc">
     <identity>
      <dns value="localhost" />
     </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
   </service>
  </services>
 
 </system.serviceModel>

Pour me connecter, j'utilise:
Code VB.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
        service.ClientCredentials.UserName.UserName = "NomUser"
        service.ClientCredentials.UserName.Password = "Password"
        service.Open()
        'traitement
 
        service.Close()

Et voilà mon erreur:
Échec de la négociation de sécurité SOAP avec « http://localhost:1182/FrancisetJF/home/GestionDoc.svc » pour la cible « http://localhost:1182/FrancisetJF/home/GestionDoc.svc ». Pour plus d’informations, voir l’exception interne.
Les détails:
{"Échec de la constitution de la chaîne CN=MyServerCert du certificat X.509. Le certificat qui a été utilisé est doté d’une chaîne d’approbation impossible à vérifier. Remplacez ce certificat ou modifiez l’élément certificateValidationMode. Une chaîne de certificat a été traitée mais s'est terminée par un certificat racine qui n'est pas approuvé par le fournisseur d'approbation. "}
Pour créer mon certificat, j'ai fait :
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=MyServerCert -sky exchange –pe