2010-03-05 5 views
5

Je me connecte à un point de terminaison tiers via WCF et j'ai un problème. Le schéma de l'enveloppe SOAP générée par WCF n'est pas compatible avec le point de fin.Comment modifier le schéma SOAP Envelope dans WCF?

Actuellement WCF génère ceci:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> 

Mais il doit être ceci:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing"> 

Je l'ai testé cela dans soapUI pour confirmer c'est le problème, mais comment puis-je contrôler cela en WCF? J'ai utilisé l'option Ajouter une référence de service dans Visual Studio pour générer le service.

Des idées?

Merci d'avance.

Andy

+0

Avez-vous essayé de créer le proxy en utilisant svcutil.exe? – Kangkan

Répondre

15

Très probablement, vous avez un problème avec la version SOAP. Quelle liaison utilisez-vous?

basicHttpBinding par défaut SOAP 1.1, tandis que wsHttpBinding par défaut SOAP 1.2

C'est SOAP 1.1 (par défaut dans basicHttpBinding):

<SOAP-ENV:Envelope 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 

tout cela est SOAP 1.2 (par défaut dans wsHttpBinding):

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> 

solutions possibles:

1) soit vous pouvez simplement changer les liaisons et c'est tout ce qu'il est - vous devez vous assurer de vérifier les paramètres de sécurité et ainsi de suite (qui diffèrent entre base et wsHttpBinding)

ou

2) vous besoin de créer votre propre liaison personnalisée et de spécifier explicitement la version SOAP dont vous avez besoin

+0

Ça a marché, merci! – andypike

+0

Oh! C'est vraiment très bien. – Kangkan

+0

Quelle solution a fonctionné pour vous? J'ai le même problème, mais la solution 1 n'est pas une option pour moi. Dois-je vraiment créer ma propre liaison personnalisée? –

Questions connexes