Вы можете преобразовать (десериализовать) ваше сообщение SOAP в объект, ожидаемый вашим сервисом. Вот эскиз того, что работает для меня:
var invoice = Deserialize<Invoice>(text);
var result = service.SubmitInvoice(invoice);
где десериализация это:
private T Deserialize<T>(string text)
{
T obj;
var serializer = new DataContractSerializer(typeof(T));
using (var ms = new MemoryStream(Encoding.Default.GetBytes(text)))
{
obj = (T)serializer.ReadObject(ms);
}
return obj;
}
Поскольку SOAP - это XML, вы можете легко настроить его структуру (например, удалить или изменить пространство имен) перед десериализацией.