2010-09-18 42 views
1

Ceci est ma configuration de service dans web.config:WCF service de liaison à l'aide AllowInsecureTransport = true, service de mise à jour de référence dans le client à l'échec

<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 = True parce que dans la production du service sera en retard un équilibreur de charge de terminaison SSL. Appeler le service de mon .Net 4.0 client fonctionne sans aucun problème mais en essayant de mettre à jour la référence de service dans VS2010 se traduit toujours par une erreur:

System.ServiceModel.Channels.TransportSecurityBindingElement Error: Security Policy Export failed. The Binding contains a TransportSecurityBindingElement but no transport security binding element that implements ITransportTokenAssertionProvider. Policy export for such a policy export is not supported.*

Je comprends ce qu'il essaie de me dire - ce qui est fondamentalement que je a désactivé la sécurité du transport sur une liaison qui l'oblige à éviter de compromettre les informations d'identification voyageant sur le réseau. Mais - c'est tout le point de allowInsecureTransport. Se pourrait-il que le générateur de proxy ne soit 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 retourner à Message Level Security et un certificat auto-signé pour le développement. L'utilisation de Message Security avait l'avantage d'être capable de coller à Cassini pour le développement au lieu d'utiliser IIS.

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

Répondre

2

J'ai rencontré ce même problème. Le problème semble être le transport http car il n'implémente pas l'interface ITransportTokenAssertionProvider, mais https. J'ai été capable de contourner ces deux façons: commuter ma liaison personnalisée pour utiliser https transport, qui implémente l'interface, et ajouter enableUnsecuredResponse = "true" à l'élément de sécurité dans la config, ou écrire une liaison personnalisée dérivant de HttpTransportBindingElement mais implémentant le interface nécessaire.

1

Je l'ai lu ces quelques fois (par exemple here ou here) mais je ne l'ai jamais tryed. Cela ressemble à un bogue dans l'exportation WSDL car lorsque vous configurez le service et le client manuellement, cela devrait fonctionner mais l'exportation des métadonnées ne fonctionne pas. Le deuxième lien propose une solution de contournement mais c'est la laide.

Ma proposition est de développer avec allowInsecureTransport défini sur false et HTTPS avec certificat de test et de basculer cette configuration lorsque vous déployez l'application (peut faire partie du package d'installation).

0

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