Frage

Dies ist meine Service-Konfiguration in web.config:

<binding name="statefulSessionWithUsernameOverTransport">
  <security authenticationMode="SecureConversation"
    requireSecurityContextCancellation="False" allowInsecureTransport="True">
    <secureConversationBootstrap authenticationMode="UserNameOverTransport"/>
  </security>
  <binaryMessageEncoding />
  <httpTransport />
</binding>

<service name="com.example.FooService"
  behaviorConfiguration="usernamePasswordAuthBehavior">
  <endpoint contract="com.example.FooService.IFooService"
    address="custom" binding="customBinding"
    bindingConfiguration="statefulSessionWithUsernameOverTransport" />
</service>

Ich gründe allowInsecureTransport = True, weil in der Produktion wird der Service, der hinter einem SSL-Terminating Load Balancer ausgeführt werden. Der Aufruf der Dienst von meinem Net 4.0 Client funktioniert ohne Probleme, aber versuchen, den Dienstverweis in VS2010 immer zu einem Fehler führt zu aktualisieren:

System.ServiceModel.Channels.TransportSecurityBindingElement Fehler: Sicherheitspolitik Export fehlgeschlagen. Die Bindung enthält eine TransportSecurityBindingElement aber kein Transportsicherheitsbindungselement, das Gerät ITransportTokenAssertionProvider. Politik Export für eine solche Politik Export wird nicht unterstützt. *

Ich verstehe, was es versucht, mir zu sagen - das ist im Grunde, dass ich behindert Transportsicherheit auf eine Bindung, die haben es erfordert die Anmeldeinformationen zu gefährden vermeiden über den Draht reisen. Aber - das ist der ganze Sinn von allowInsecureTransport . Könnte es die Proxy-Generator sein, dass einfach nicht bewusst, dieses Attribut ist?

Update:

Es sieht aus wie der WSDL-Datei-Generator in der Tat nicht in der Lage ist mit dem Attribute zu beschäftigen. Ich musste Nachricht Level Security zurück gehen und ein selbst signiertes Zertifikat für die Entwicklung. Mit der Nachrichtensicherheit den Vorteil, dass sie hatte für Entwicklung zu Cassini bleiben, anstatt zu gehen voll geblasen IIS.

<wsHttpBinding>
    <binding name="wshttpDevelopmentBinding">
      <security mode="Message">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
</wsHttpBinding>
War es hilfreich?

Lösung

Ich lief in das gleiche Problem. Das Problem scheint der HTTP-Transport zu sein, weil es nicht die ITransportTokenAssertionProvider Schnittstelle nicht implementiert, aber https tut. Ich konnte dies auf zwei Arten umgehen: Schalten Sie meine benutzerdefinierte https Verkehrsmittel benutzen Bindung, die implementiert die Schnittstelle, und fügen Sie enableUnsecuredResponse = „true“ auf das Sicherheitselement in der Config oder eine benutzerdefinierte schreiben von Httptransportbindingelement-Bindung ableiten, aber die Umsetzung der notwendige Schnittstelle.

Andere Tipps

Ich las über diese einige Male (zum Beispiel hier oder hier ), aber ich habe tryed es nie. Es sieht aus wie ein Fehler in WSDL-Export, weil, wenn Sie Service und Client manuell konfigurieren, sollte es funktionieren, aber Metadaten Export funktioniert nicht. Zweiter Link etwas Abhilfe vorschlagen, aber es ist das hässliche.

Mein Vorschlag ist mit allowInsecureTransport auf false gesetzt und HTTPS mit Prüfzertifikat und schalten diese Konfiguration zu entwickeln, wenn Sie die Anwendung bereitstellen (kann Teil Installationspaket sein).

Ich lief in ein ähnliches Problem. Ich installierte Hot-Fix für .NET Framework 3.5 auf den Client-Rechnern, und es funktionierte danach.

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