Sei sicuro che il payload effettivo sia XML o che il formato di serializzazione sia XML?
Normalmente, quando le persone usano i servizi WCF, definiscono un oggetto (in C #, ad esempio) per passare attraverso il filo. Uno stile valido consiste nel passare un singolo oggetto C # come parametro al servizio (FooRequest) e fare in modo che il servizio restituisca un singolo oggetto (FooResponse). Questi oggetti conterranno tutti i dati che è necessario spostare. Naturalmente, possono fare riferimento ad altri oggetti, ecc. Non si vuole passare sopra strutture dati specifiche di .NET (come un oggetto dizionario o un DataSet); idealmente passerai oggetti generici che hanno senso in qualsiasi piattaforma.
Dovrai assicurarti che i tuoi oggetti siano serializzabili, ma di solito non è difficile.
Si dà il caso che WCF scelga di serializzarlo in XML mentre viaggia attraverso il filo, ma non è necessario farlo esplicitamente. Non devi necessariamente nemmeno saperlo. Ci sono anche altri formati possibili, come JSON.
Esegui praticamente qualsiasi tutorial su WCF (ad esempio questo ) per vedere cosa intendo Concentrati su interfacce pulite, logica chiara, buoni nomi - non sul formato wire. Puoi leggere i principi SOA .
[modifica] Per quanto riguarda ASync: se si importa il WSDL con Visual Studio, verrà generato un proxy sul lato client. Questo è il modo in cui accedi al servizio dal codice cliente. Ciò includerà i metodi che consentono di chiamare il servizio in modo asincrono. Vedi il link tutoriale di cui sopra.
Anche se per caso il tuo requisito è quello di includere un codice XML arbitrario, puoi comunque utilizzare questo approccio. È sufficiente posizionare l'XML come stringa in un membro stringa negli oggetti richiesta / risposta.
Buona fortuna! -Bill