Ajouter une en-tête SOAP à l'aide de c#/ASP.NET
Je suis en train d'utiliser un trafic web service. Un exemple de la requête SOAP est donnée ci-dessous.
J'ai créé une classe proxy en c# à l'aide de Wsdl.exe à partir du WSDL structure.
Ce que je pense que j'ai besoin de le faire maintenant, en quelque sorte, insérer l '"authentifier' en-tête SOAP dans le SAVON de la structure pour
l'appel de la méthode. Je suis pas sûr de la façon d'ajouter l'en-tête de la méthode de service appeler?
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://www.inteleacst.com.au/wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<ns1:authenticate>
<SOAP-ENC:Struct>
<username>username</username>
<password>password</password>
</SOAP-ENC:Struct>
</ns1:authenticate>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:getAllTraffic>
<States SOAP-ENC:arrayType="xsd:string[3]" xsi:type="ns1:State_Arr">
<item xsi:type="xsd:string">VIC</item>
<item xsi:type="xsd:string">NSW</item>
<item xsi:type="xsd:string">NT</item>
</States>
<EventCodes SOAP-ENC:arrayType="xsd:int[1]" xsi:type="ns1:EventCode_arr">
<item xsi:type="xsd:int">802</item>
</EventCodes>
</ns1:getAllTraffic>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Voici le code dans la classe de proxy pour l'appel de la méthode de service web.
[System.Web.Services.Protocols.SoapRpcMethodAttribute("http://webservice.intelecast.com.au/traffic/PublicSoap/server.php#getAllTraffic", RequestNamespace="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php", ResponseNamespace="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php")]
[return: System.Xml.Serialization.SoapElementAttribute("return")]
public TrafficInfo[] getAllTraffic(string[] States, int[] EventCodes) {
object[] results = this.Invoke("getAllTraffic", new object[] {
States,
EventCodes});
return ((TrafficInfo[])(results[0]));
}
Vous devez vous connecter pour publier un commentaire.
La recherche sur le web j'ai trouvé un post sur un forum un problème similaire et une bonne solution.
Disponible ici - forums.asp.net/t/1137408.aspx
L'ajout d'en-têtes SOAP est une de ces choses qui a obtenu plus complexes, avec WCF par rapport à la précédente "Ajouter une Référence de Service Web" dans Visual Studio .Net 2003/2005 et la création d'une extension SOAP.
De le faire dans WCF, vous devez ajouter une EndPointBehavior. Il existe assez peu d'exemples autour de google sur IEndpointBehavior et IClientMessageInspector. Cette l'article offre une belle succincte exemple, mais vous devrez peut-être développer.