2010-04-05 3 views
2

Je suis assez nouveau à SOAP alors allez-y doucement sur moi. Je suis en train d'installer un service SOAP qui accepte le format d'en-tête suivant:En-tête de configuration dans SOAP avec ASP.NET 3.5 WCF

<soap:Header> 
    <wsse:Security> 
     <wsse:UsernameToken wsu:Id='SecurityToken-securityToken'> 
     <wsse:Username>Username</wsse:Username> 
     <wsse:Password>Password</wsse:Password> 
     <wsu:Created>Timestamp</wsu:Created> 
     </wsse:UsernameToken> 
    </wsse:Security> 
</soap:Header> 

L'application que je suis INCORPORANT ce service en est une application Web ASP.NET 3.5 et je l'ai déjà configuré un point de terminaison SOAP en utilisant WCF. J'ai mis en place un service de base pour m'assurer que la WCF fonctionne et que cela fonctionne bien (sans tenir compte de l'en-tête). J'ai entendu que le format ci-dessus suit WS-Security, donc j'ajouté WSHttpBinding dans le web.config:

<service name="Nexternal.Service.XMLTools.VNService" 
     behaviorConfiguration="VNServiceBehavior"> 
    <!--The first endpoint would be picked up from the confirg 
    this shows how the config can be overriden with the service host--> 
    <endpoint address="" 
      binding="wsHttpBinding" 
      contract="Nexternal.Service.XMLTools.IVNService"/> 
</service> 

J'ai téléchargé un logiciel de test (soapUI) et collé dans un message de test avec l'en-tête et il est venu au-dessus de retour avec une erreur de 400 Bad Request.

... pour ce que ça vaut, je cours Visual Studio 2008 en utilisant IIS7. Je me sens comme si je tournais en rond alors toute aide serait génial. Merci d'avance.

Répondre

3

Compris. J'ai été en mesure de personnaliser ce qui a été généré dans le WSDL en utilisant MessageContracts (http://msdn.microsoft.com/en-us/library/ms730255.aspx). Cela m'a permis de spécifier le format de l'en-tête. Pour chaque nœud contenant des nœuds enfants, j'ai créé une classe pour représenter ce nœud et utilisé les outils de sérialisation de .NET (par exemple XmlElementAttribute, XmlArrayAttribute, etc.) pour spécifier comment cela devrait être reflété dans le WSDL généré. DataContract pourrait également être utilisé bien que d'après ma compréhension DataContract était juste pour les formats de base et ne vous permettent pas vraiment de plonger dans la façon dont il est formaté.

J'espère que cela aidera tous ceux qui ont des problèmes similaires.

Si quelqu'un qui en sait plus sur SOAP trouve un défaut s'il vous plaît faites le moi savoir. L'entrée est grandement appréciée.