WCF e codifica di testo personalizzato - Business disordinato
-
27-10-2019 - |
Domanda
Ho uno strano problema WCF qui ...
Ci stiamo collegando a un servizio Web di terze parti scadente; È stato un incubo persino per farlo andare avanti, abbiamo dovuto creare un rilegatura WCF personalizzato poiché quei ragazzi hanno deciso di usare "ISO-8859-1" come codifica del loro testo (anziché UTF-8 come tutti gli altri sul web) e Anche le altre impostazioni erano disordinate - e non documentate da nessuna parte, ovviamente ...
Funziona bene da un po 'di tempo, ma all'improvviso alcuni dei nostri dati che tornano nel mangel. Ci aspettiamo di recuperare i nomi dei luoghi e di essere in Svizzera, alcuni di questi hanno Umlaut tedeschi. Ma negli ultimi due o tre mesi, improvvisamente torniamo
Hünibach
Invece del giusto
Hünibach
Quindi il ü (u umlaut) è mangellato.
Nessun problema, ho pensato che fossero finalmente passati a UTF-8 e ho cambiato il mio legame personalizzato per utilizzare UTF-8 come codificatore di testo anziché ISO-8859-1-ma niente fortuna-no sto ottenendo:
Eccezione: System.ServiceModel.security.MessagesChifrifurityException
La richiesta HTTP era vietata con lo schema di autenticazione del client "Basic".
Che F ????? Il servizio è protetto da un nome utente/password che trasmettiamo utilizzando il ClientCredentials
di Wcf. Sembra che cambiare la codifica del testo in qualche modo incasina le credenziali!?!?! Strano.....
OK-Torna a ISO-8859-1, e ho appena provato a interpretare il payload di risposta come UTF-8-Ancora una volta senza fortuna :-( Provato con UTF-16, UTF-32, UTF-7 Even, Unicode, BigendianUnicode-tutti inutilmente.
Allora come diavolo riesco a recuperare le mie vere Umlauts, ed essere ancora in grado di chiamare quel servizio sanguinoso ... funziona bene in Soapui, a proposito .....
Qualche idea?? Sto afferrando disperatamente qualsiasi cannuccia che potresti lanciarmi !!
Soluzione
Prova a ispezionare i dati che stai tornando e vedi quali codici numerici stanno usando per rappresentarli. Umlaut è uno di quei personaggi in 8859-1 che condivide il codice con altri caratteri.
Vedi il secondo par in - http://en.wikipedia.org/wiki/%C3%9C#Typografia
Altri suggerimenti
In realtà, ho finalmente capito quale fosse il problema.
Per qualche motivo, cambiando il campione CustomTextEncoder
(fornito da Microsoft nei campioni WCF e WF) per utilizzare UTF-8 anziché ISO-8859-1 non funziona.
D'altra parte, strappare l'encoder di testo personalizzato dal mio rilegatura personalizzata e semplicemente utilizzando lo standard TextMessageEncoder
che WCF fornisce da Get GO (che utilizza UTF-8 per impostazione predefinita) ha funzionato.
Non chiedermi perché .... questi sono solo i fatti che ho trovato ...