Nous devons nous connecter à un service SOAP tiers et nous utilisons WCF pour le faire. Le service a été développé en utilisant Apache AXIS, et nous n'avons aucun contrôle sur celui-ci, et nous n'avons aucune influence pour changer son fonctionnement. Le problème que nous voyons est qu'il s'attend à ce que les demandes soient formatées en utilisant la sécurité des services Web, donc nous faisons toute la bonne signature, etc. La réponse de la 3ème partie n'est cependant pas sécurisée. Si nous reniflons le fil, nous voyons la réponse revenir bien (mais sans aucun horodatage, signature, etc.). Les composants .NET sous-jacents affichent cette erreur comme une erreur car elle la considère comme un problème de sécurité. Par conséquent, nous ne recevons pas la réponse de savon en tant que telle. Existe-t-il un moyen de configurer le cadre WCF pour envoyer des demandes sécurisées, mais ne pas attendre des champs de sécurité dans la réponse? En regardant les spécifications OASIS, il ne semble pas exiger que les réponses doivent être sécurisées.Existe-t-il un moyen de dire à WCF d'utiliser la sécurité dans la requête, mais de l'ignorer dans la réponse?
Pour plus d'informations, voici l'exception que nous voyons:
L'exception que nous recevons est:
System.ServiceModel.Security.MessageSecurityException was caught
Message="Security processor was unable to find a security header in the message. This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties. This can occur if the service is configured for security and the client is not using security."
Source="mscorlib"
StackTrace:
Server stack trace:
at System.ServiceModel.Security.TransportSecurityProtocol.VerifyIncomingMessageCore(Message& message, TimeSpan timeout)
at System.ServiceModel.Security.TransportSecurityProtocol.VerifyIncomingMessage(Message& message, TimeSpan timeout)
at System.ServiceModel.Security.SecurityProtocol.VerifyIncomingMessage(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates)
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout)
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
Soit dit en passant, j'ai vu beaucoup de messages indiquant que si vous laissez l'horodatage de sortie, puis le les champs de sécurité ne seront pas attendus. Ce n'est pas une option - Le service que nous communiquons avec les timestamps des mandats.
Notez également que ce patch fait partie de .NET 3.5 SP1 –
Il y a également un correctif pour .NET 3.0, mais uniquement sur demande. Le correctif pour 3.5 SP1 a également été déployé dans Windows 7 SP1 (et également pour Server 2008) – nickvane