У меня есть клиент, который взаимодействует с веб-службой. Класс, с которым я общаюсь, является классом С#, который создается через wsdl.exe. Теперь я хочу регистрировать все входящие и исходящие сообщения.
Что я сделал до сих пор, так это написать класс, который наследуется от автоматически созданного класса С#, и я переопределил метод GetReaderForMessage. Таким образом, я могу получить доступ к входящему сообщению более или менее следующим образом:
protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
{
System.Xml.XmlReader aReader = base.GetReaderForMessage(message, bufferSize);
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(aReader);
string content = doc.InnerXml.ToString();
System.Xml.XmlReader aReader2 = System.Xml.XmlReader.Create(new System.IO.StringReader(content));
return aReader2;
}
Очевидно, я не очень доволен этим решением, потому что в основном я создаю два xml-читателя. Один для чтения содержимого сообщения SOAP и один для возврата к вызывающему методу. Кроме того, я не могу сделать то же самое с методом GetWriterForMessage.
Но может быть, я просто делаю слишком трудные для начала. Возможно ли, например, напрямую прочитать содержимое объекта SoapClientMessage? Я прочитал несколько статей, в которых говорится, что я должен использовать SoapExtensions здесь, но из того, что я могу понять, это будет работать, только если "клиент", который я создаю, сам является веб-сервисом, который в этом случае не является.
Любые предложения?