L'implementazione ASP.NET dei web services presenta una lacuna abbastanza importante: non permette di modificare l'encoding. Infatto, l'encoding di default è UTF-8 e non è possibile modificarlo. Questo pone non pochi problemi quando si vogliono usare caratteri speciali.
Una soluzione comunque c'è: scriversi una SoapExtension. Infatti, attraverso questo tipo di classi è possibile intercettare lo stream SOAP in tutte le sue fasi (prima e dopo la serializzazione sia in entrata che in uscita dal web server). Ho scritto quindi una classe EncodingExtension che non fa altro di modificare l'engoding del messaggio SOAP in uscita. Per provarla, potete scaricarla dal sito GotDotNet.