2010-10-19 4 views
2

Comment ajoutez-vous créer un en-tête de service Web SOAP?Créer un en-tête SOAP?

Exemple

<soap:Header> 
    <myHeader xmlns="https://www.domain.com"> 
     <Username>string</Username> 
     <Password>string</Password> 
    </myHeader> 
</soap:Header> 

code source

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols; 


namespace TestWebServices 
{ 
    /// <summary> 
    /// Summary description 
    /// </summary> 
    [WebService(Namespace = "https://Test.com")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    public class Testing : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public string GetTestValue() 
     { 


      return "xyz"; 
     } 
    } 

} 

Répondre

1

Un message SOAP avec les en-têtes peut ressembler à quelque chose comme ce qui suit:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 

    <soap:Header> 
    <Username>string</Username> 
    <Password>string</Password> 
    </soap:Header> 

</soap:Envelope> 
0
EndpointAddressBuilder builder = new EndpointAddressBuilder(client.Endpoint.Address); 
AddressHeader header = AddressHeader.CreateAddressHeader("apiKey", "http://tempuri.org", "longapikeyhere"); 

builder.Headers.Add(header); 
client.Endpoint.Address = builder.ToEndpointAddress(); 
2

Si vous avez besoin un contrôle précis de grain sur la façon dont l'en-tête de savon xml obtient rendu (se produit lors de l'interfaçage avec un service web écrit avec Java), vous pouvez toujours remplacer tout le rendu en implémentant IXmlSerializable

[XmlRoot("customHeader", Namespace = "http://somecompany.com/webservices/security/2012/topSecret")] 
public class customHeader: SoapHeader, IXmlSerializable 
{ 
    public customHeader() 
    { 
     Actor = "http://schemas.xmlsoap.org/soap/actor/next"; 
     MustUnderstand = false; 
    } 

    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     return null; 
     //throw new NotImplementedException(); 
    } 

    public void ReadXml(XmlReader reader) 
    { 
     //throw new NotImplementedException(); 
    } 

    public void WriteXml(XmlWriter writer) 
    { 
     writer.WriteAttributeString("soap:actor", Actor); 
     writer.WriteAttributeString("soap:mustUnderstand", MustUnderstand ? "1" : "0"); 
     writer.WriteRaw("some encrypted data"); 
     //get it exactly the way you want it in here without mucking with Xml* property attributes for hours on end 
     //writer.WriteElement(...); 
    } 
} 
+0

Y at-il un moyen d'utiliser ce type de code pour ajouter un élément personnalisé à un en-tête SOAP? –