Предполагая, что ваш requestMessage такой же, как в вашем другом сообщении (что, похоже, имеет место, поскольку в сообщении об ошибке говорится, что он получает строку), вы используете неверную перегрузку Message.CreateMessage. Тот, который вы используете, определяется как
Message.CreateMessage(MessageVersion version, string action, object body);
И «сообщение запроса», которое вы передаете ему, является целым конвертом сообщения. Этот, который вы используете, будет пытаться сериализовать тело (и, поскольку это строка, он будет сериализовать его как <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">...</string>
- что в точности соответствует вашему сообщению об ошибке.
То, что вам нужно использовать, поскольку у вас уже есть конверт SOAP, это одна перегрузка, которая принимает это, например, приведенная ниже:
Message.CreateMessage(XmlReader enveloperReader, int maxSizeOfHeaders, MessageVersion version);
И код будет выглядеть примерно так:
string requestMessageString = @"<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:inf="http://www.informatica.com/"
xmlns:wsdl="http://www.informatica.com/wsdl/">
<soapenv:Header>
<inf:Security>
<UsernameToken>
<Username>john</Username>
<Password>jhgfsdjgfj</Password>
</UsernameToken>
</inf:Security>
</soapenv:Header>
<soapenv:Body>
<wsdl:doClient_ws_IbankRequest>
<wsdl:doClient_ws_IbankRequestElement>
<!--Optional:-->
<wsdl:Client_No>00460590</wsdl:Client_No>
</wsdl:doClient_ws_IbankRequestElement>
</wsdl:doClient_ws_IbankRequest>
</soapenv:Body>
</soapenv:Envelope>";
XmlReader envelopeReader = XmlReader.Create(new StringReader(requestMessageString));
Message requestMsg = Message.CreateMessage(envelopeReader, int.MaxValue, MessageVersion.Soap11);