WCF Client - Comment traiter ou ignorer un MustUnderstand élément d'en-tête?
Je suis en train d'écrire un WCF
Client qui consomme non-.Net service web, à l'aide de WS-Security. La réponse du service contient un en-tête de Sécurité avec mustUnderstand définie sur true.
À l'aide d'un ServiceModelListener, je ne vois données réelles de retour à partir du service. La WCF client ne parvient pas, cependant, car il n'est pas le traitement de l'en-tête de Sécurité.
<env:Header>
<wsse:Security env:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Timestamp wsu:Id="timestamp">
<wsu:Created>2012-03-28T13:43:54.474Z</wsu:Created>
<wsu:Expires>2012-03-28T13:48:54.474Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</env:Header>
WCF Client Message d'Erreur:
L'en-tête de la "Sécurité" de l'espace de noms ' http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd " n'a pas été comprise par le destinataire de ce message, ce qui provoque le message de ne pas être traitées. Cette erreur indique généralement que l'expéditeur de ce message, a permis à un protocole de communication que le récepteur ne peut pas traiter. Veuillez vous assurer que la configuration du client liaison est compatible avec le service de liaison.
Mon WCF
client n'a pas besoin de l'horodatage info. Est-il un moyen facile de stub dans une routine de traitement? J'ai déjà essayé l'extension de la Réponse de la classe & ajout d'un [MessageHeader de la propriété].
EDIT:
Demandé une autre façon: Comment puis-je mettre en œuvre un
WCF
client qui accepte d'en-tête personnalisé, les éléments marqués Doivent Comprendre?
OriginalL'auteur Mark Maslar | 2012-03-28
Vous devez vous connecter pour publier un commentaire.
Il existe différentes normes de WS-Security. Pourrait-il judicieux de modifier la liaison à côté client, depuis basicHttpBinding et wsHttpBindings travaillent avec différentes normes de sécurité.
OriginalL'auteur paramosh
J'ai rencontré un problème similaire. Je ne sais pas si c'est utile ou pas.
MSDN WCF Extensibilité
http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibility-message-inspectors.aspx
La configuration est ici Certificat de base, Oracle Application Server 10g, et .Net de consommer des services. À l'aide de SOAPUi a été très utile en essayant de comprendre ce qui se passait avec la Demande et la réponse.
Je n'ai pas essayé de modifier le code pour utiliser basicHttpBinding, mais j'ai utilisé WSHttpBinding comme la base de ma configuration dans le code. Ensuite utilisés
Bouclé pour le TextMessageEncodingBindingElement pour définir Soap11 et AddressingVersion à Aucun.
J'ai utilisé le ChannelFactory et ajouté un Comportement de point de Terminaison pour un Message de l'Inspecteur.
À ce stade, j'ai ensuite eu le contrôle de la demande et j'ai pu ajouter l'en-tête approprié et modifié le mustUnderstand sur l'Action.
À l'aide de SOAPUi j'ai pris mon Message.ToString() et placez-la dans SOAPUI et testé la demande. Une fois les éléments qui ont été nécessaires ont été ajoutés à la demande, il a ensuite été déterminé que l'OEA serveur a été fait de ne pas répondre avec tous les éléments nécessaires. En utilisant le message de l'inspecteur pour la réponse, j'ai modifié le message pour inclure les en-têtes manquantes. Je ne me souviens pas où j'ai trouvé le code de base pour le message de l'inspecteur, mais vous devez modifier votre code pour utlize correctement.
Pour mon exemple, voici quelques extraits.
Pour transformer le message en
J'ai dû modifier l'en-Tête, donc à l'aide d'une boucle for que j'ai attrapé le XElement et a ajouté l'OASIS d'en-tête et ajouté À l'en-tête.
J'ai également eu à modifier l'Action d'en-Tête
Mon problème est que le Service n'a pas répondu à une Action d'en-Tête
Donc dans le
J'ai appelé mon TransformReply retour type de Message avec quelque chose comme ce qui suit. Vous devrez peut-être modifier les valeurs de la chaîne.Vide, mais c'est juste un exemple.
...
...
Je voudrais vraiment vous suggérons d'utiliser un outil tel que SOUPUI donc etde à gâcher avec de l'enveloppe et de voir la réponse. Si vous ne le protocole SSL, vous devez créer un fichier cacert et le placer dans le SSLSettings des préférences.
OriginalL'auteur Adam W.