Привет всем!
Может кто сталкивался с задачей.
Есть прокси, сформированный по wsdl. Создается набор объектов, которые потом сериализуются в SOAP-сообщение и отправляются на сервер.
Клиент унаследован от ClientBase.
Надо ДО попытки отправки сообщения получить содержимое <S:Body> в XML, по результатам анализа либо дописать дополнительную ветку руками, либо не отправлять сообщение.
Попытки закончились на том, что я создал класс с интерфейсом IClientMessageInspector, добавил Behavior в EndPoint и могу в BeforeSendRequest увидеть сформированное сообщение. Однако, отменить отправку, как я понимаю, уже нельзя и руками при необходимости дописать туда нормально не получается.
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
// .......
XmlDocument xmlDoc .....;
// .......
string msgXMLStr = xmlDoc.OuterXml;
var bytes = Encoding.UTF8.GetBytes(msgXMLStr);
var reader = XmlDictionaryReader.CreateTextReader(bytes, XmlDictionaryReaderQuotas.Max);
request = Message.CreateMessage(reader, Int32.MaxValue, request.Version);
System.Diagnostics.Trace.WriteLine(request.ToString());
return request;
}
До изменения сообщение в лог пишется нормально. После изменения Body выглядит вот так:
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">... поток ...</s:Body>
Отправляется, похоже, тоже битым, потому что сервер на него реагирует ответам, что в Body вообще не найден нужный объект.
Заранее спасибо.