Frage

Ok, habe ich einige Fragen zu diesem Thema im Zusammenhang gesehen, und ich habe viele Ideen in ihnen ohne Erfolg präsentiert versucht. Hier ist meine Situation:

Ich schlage einen Web-Service über Intranet meiner Firma. Ich habe svcutil.exe verwendet, um die Client-Klasse für WCF zu generieren. Ich konnte den Web-Service-Aufruf kein Problem, wenn der Service war in der Entwicklung laufen und nicht Authentifizierungsinformationen erfordern, so dass ich weiß, dass der Code funktioniert. Damals lief der Code über SSL. Ich importierte das erforderliche Zertifikat in die Vertrauenswürdige Stammzertifizierungsstellen, und alles war in Ordnung.

Wir sind gerade nach einer Bühnenumgebung, und wurde der Dienst aktualisiert Anmeldeinformationen erfordern zu verbinden. Ich wechselte meine Verbindung zum neuen Endpunkt, und fügte hinzu, Code zu authentifizieren. Dies ist mein erstes Mal die Arbeit mit wcf, so tragen Sie bitte mit mir auf offensichtliche Fehler. Mein Problem ist, dass ich nicht das Zertifikat über den Code finden kann für die Authentifizierung an den Dienst zu übergeben. Ich bin stützen diese weg von einigen Online-Code Beispiele, die ich gefunden.

Hier ist ein Beispiel für meine Config von svcutil erzeugt:

<system.serviceModel>
  <bindings>
   <basicHttpBinding>
    <binding 
        name="xxxSOAPBinding" 
        .... (irrelevant config settings)....
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
     <security mode="Transport">
      <transport clientCredentialType="Certificate" />
     </security>
    </binding>
   </basicHttpBinding>
  </bindings>
  <client>
   <endpoint address="https://xxxServices_1_0_0"
    binding="basicHttpBinding" bindingConfiguration="xxxSOAPBinding" 
    contract="xxxService" name="xxxService" />
  </client>
 </system.serviceModel>

Und hier ist der Code, den ich versuchen bin mit zu verbinden. Die Ausnahme wird so bald geworfen, wie ich versuche, das Zertifikat zu finden:

using (var svc = new xxxServiceClient())
{
    svc.ClientCredentials.UserName.UserName = "XXX";
    svc.ClientCredentials.UserName.Password = "XXX";

    svc.ClientCredentials.ClientCertificate
     .SetCertificate(StoreLocation.LocalMachine, StoreName.Root, 
                     X509FindType.FindBySubjectName, "xxx");
...
}

Ich habe mehrere verschiedene X509FindTypes ausprobiert und abgestimmt sie ohne Erfolg auf die Werte auf dem cert. Gibt es etwas falsch mit meinem Code? Gibt es eine andere Art, wie ich den CERT Speicher abfragen kann die Werte überprüfen ich vorbei?

Die Dev-Maschine, wo ich Visual Studio leite hatte das CERT importiert.

War es hilfreich?

Lösung

Zwei dumme Fragen:

  • Sie sind sicher Ihre certificiate überhaupt installiert?
  • ist dies ein certificiate speziell für diese Inszenierung Maschine?

Auch scheint es ein wenig seltsam, Sie aller Einstellung Benutzername / Passwort zuerst sind, und dann Einstellung auch die Anmeldeinformationen. Können Sie den Benutzernamen / Passwort Teil kommentieren Sie? Macht das einen Unterschied?

Marc

Andere Tipps

Sind Sie sicher, dass das das Zertifikat auf dem lokalen Computerspeicher importiert wurde, ist es in dem Current Speicher sein könnte.

Das mag dumm klingen, aber sind Sie sicher, dass das neue Zertifikat für den Staging-Service ist in Ihren cert Speicher installiert? Das ist höchstwahrscheinlich Ihr Problem.

Auch, weil Sie nicht erwähnt, welche Ausnahme ausgelöst wird, ist es möglich, das Problem ist, dass Sie Benutzername / Passwort Anmeldeinformationen festgelegt haben, bevor Clientcertificate Anmeldeinformationen einstellen, wenn Ihre Bindung zeigt nicht die Verwendung von Benutzername / Passwort. Könnte es ein Problem sein; sie sind gegenseitig aus, IIRC.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top