WCF service de liaison à l'aide AllowInsecureTransport = true causes de service de mise à jour de référence au client à l'échec

StackOverflow https://stackoverflow.com/questions/3743288

Question

Ceci est ma configuration de service dans 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>

Je suis en train AllowInsecureTransport = Vrai parce que dans la production du service sera exécuté derrière un SSL Terminating Load Balancer. Appeler le service de mes .Net 4.0 fonctionne client sans aucun problème mais en essayant de mettre à jour la référence de service dans VS2010 toujours provoque une erreur:

  

System.ServiceModel.Channels.TransportSecurityBindingElement   Erreur: la politique de sécurité d'exportation a échoué. La liaison contient un TransportSecurityBindingElement mais aucun élément de liaison de sécurité de transport qui met en œuvre ITransportTokenAssertionProvider. l'exportation de la politique pour une telle exportation politique n'est pas pris en charge. *

Je comprends ce qu'il essaie de me dire - ce qui est en fait que j'ai la sécurité des transports sur une liaison de personnes handicapées qui en a besoin pour éviter de compromettre les pouvoirs qui voyagent sur le fil. Mais - c'est le point entier de AllowInsecureTransport . Se pourrait-il que le générateur proxy est tout simplement pas au courant de cet attribut?

Mise à jour:

Il semble que le générateur de wsdl est en effet incapable de faire face à l'attribut. Je devais revenir à un message Niveau de sécurité et un certificat auto-signé pour le développement. En utilisant un message de sécurité a l'avantage d'être en mesure de tenir à Cassini au service du développement au lieu d'aller IIS épanouie.

<wsHttpBinding>
    <binding name="wshttpDevelopmentBinding">
      <security mode="Message">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
</wsHttpBinding>
Était-ce utile?

La solution

je suis tombé sur cette même question. Le problème semble être le transport http parce qu'il ne met pas en oeuvre l'interface ITransportTokenAssertionProvider, mais https fait. J'ai pu contourner ces deux façons: changer ma liaison de liaison personnalisée à utiliser https transport, qui implémente l'interface et ajouter enableUnsecuredResponse = « true » à l'élément de sécurité dans la configuration, ou écrire une coutume provenant de HttpTransportBindingElement, mais la mise en œuvre du interface nécessaire.

Autres conseils

Je l'ai lu ces quelques fois (par exemple ici ou ici ) mais je ne l'ai jamais tryed. Il ressemble à un bogue dans l'exportation WSDL parce que lorsque vous configurez le service client et il devrait fonctionner manuellement mais l'exportation des métadonnées ne fonctionne pas. Deuxième lien propose une solution de contournement, mais il est laid.

Ma proposition est de développer avec AllowInsecureTransport ensemble false et HTTPS avec certificat de test et d'activer cette configuration lors du déploiement de l'application (peut faire partie du package d'installation).

je suis tombé sur un problème similaire. J'ai installé Correctif pour le .NET Framework 3.5 sur les machines clientes, et cela a fonctionné après.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top