La méthode dans .Net 1.1 et 1.2 :
.NET Framework 1.1 : Using SOAP Headers
Version VS 2005 : http://msdn.microsoft.com/en-us/library/8728chd5%28v=VS.80%29.aspx
VS2005 : Build a Client That Processes SOAP Headers
Ya les soap extension aussi : http://msdn.microsoft.com/en-us/library/aa719520.aspx
Une description de comment elles permettent de jouer avec les headers : http://msdn.microsoft.com/en-us/library/aa480503.aspx

Bon bref, voici la manière de s’en sortir pour ajouter un en-tête qui n’est pas décrit dans le WSDL, avec un .Net récent (à travers le cas des en-têtes WS-Addressing)

En java, ou en Axis2/C-PHP ce n’est visiblement pas très simple non plus :
Jax/RPC : Définition du WSDL and implémentation jax/RPC pour implicit et explicit SOAP headers
WebSphere : Envoi de valeurs dans des en-têtes SOAP implicites

Axis2/C and WSF/PHP : How to Build Custom SOAP Headers in WSDL

Une page toute entière consacrée à WS Security :
http://wcfsecurity.codeplex.com/

add a custom text encoder, switch to .NET4.0 and remove from the incoming message all the security infos