2009-03-02 11 views
8

Sto creando un servizio WCF basato su una specifica W3C che definisce un endpoint del servizio Web RESTful che accetta i dati del post "application/x-www-form-urlencoded". WCF non supporta questo tipo di codifica dei messaggi per impostazione predefinita e ho trovato un certo numero di diversi esempi di creazione di un contratto che assomiglia a questo:Il modo migliore per supportare i dati dei messaggi "application/x-www-form-urlencoded" con WCF?

XElement Query_Post(Stream postData); 

E poi entro l'attuazione decodificare il flusso postData utilizzando il metodo HttpUtility.ParseQueryString .

Qualcuno sa di un modo più fortemente tipizzato di supportare "application/x-www-form-urlencoded" in WCF?

Vorrei che il mio contratto di operazione da:

XElement Query_Post(string query, string [] params); 
+3

Il fatto che 24 ore dopo nessuno sappia come fare ciò che dovrebbe essere un pensiero di base dovrebbe indicare che WCF non è la migliore piattaforma per costruire cose tranquille. Prova OpenRasta, credo che abbia un codec integrato per gestire i dati x-www-form-urlencoded. –

risposta

7

Il modo migliore è quello di utilizzare Stream come Raw HTTP POST with WCF o quello che stai dicendo. Il motivo è perché WCF astrae tutte le informazioni sul layout fisico a livello di comunicazione dal codice di servizio. Idealmente, si vorrebbe creare un servizio che potrebbe trasformarsi in SOAP o REST semplicemente capovolgendo l'interruttore.

Per supportarlo in modo nativo, probabilmente è necessario estendere WebHttpBinding oppure creare il proprio binding e implementare custom encoder. Questo è simmetrico all'output come dice il post collegato. Devi girare le braccia per far sì che WCF produca cose non XML/JSON.

+0

Hai un esempio con un collegamento non morto? –

2

biblioteca La WCF REST Contrib consente questa funzionalità:

https://github.com/mikeobrien/WcfRestContrib

Esso comprende un POX formattatore e la forma url formattatore codificato e ti permette di creare facilmente il proprio. I formattatori sono associati a tipi mime e automaticamente selezionati per serializzare/deserializzare il corpo dell'entità in base al tipo di contenuto e accettare intestazioni.

+0

Downvoted perché l'URL è rotto ... – ewitkows

+0

Questa risposta è il capo di 6 anni. – hcoverlambda

+0

E non fornisce alcun aiuto più capo – ewitkows