Как получить необработанный XML, возвращаемый из запроса веб-службы - PullRequest
4 голосов
/ 24 ноября 2008

Кто-нибудь знает простой способ получения необработанного XML-кода, возвращаемого при запросе веб-службы?

Я видел способ сделать это с помощью Улучшения веб-служб , но я не хочу добавлять зависимости.

Ответы [ 2 ]

3 голосов
/ 04 декабря 2008

Итак, вот как я это сделал. Сценарий состоит в том, что пользователь нажимает кнопку и хочет увидеть необработанный XML, возвращаемый веб-сервисом. Это даст вам это. В итоге я использовал xslt для удаления генерируемых пространств имен. Если вы этого не сделаете, вы получите кучу раздражающих атрибутов пространств имен в XML.

        // Calling the webservice
        com.fake.exampleWebservice bs = new com.fake.exampleWebservice();
        string[] foo = bs.DummyMethod();

        // Serializing the returned object
        System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(foo.GetType());
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        x.Serialize(ms, foo);
        ms.Position = 0;

        // Getting rid of the annoying namespaces - optional
        System.Xml.XPath.XPathDocument doc = new System.Xml.XPath.XPathDocument(ms);
        System.Xml.Xsl.XslCompiledTransform xct = new System.Xml.Xsl.XslCompiledTransform();
        xct.Load(Server.MapPath("RemoveNamespace.xslt"));
        ms = new System.IO.MemoryStream();
        xct.Transform(doc, null, ms);

        // Outputting to client
        byte[] byteArray = ms.ToArray();
        Response.Clear();
        Response.AddHeader("Content-Disposition", "attachment; filename=results.xml");
        Response.AddHeader("Content-Length", byteArray.Length.ToString());
        Response.ContentType = "text/xml";
        Response.BinaryWrite(byteArray);
        Response.End();
3 голосов
/ 24 ноября 2008

У вас есть два реальных варианта. Вы можете создать SoapExtension, которое будет вставляться в поток ответов и извлекать необработанный XML, или вы можете изменить заглушки прокси для использования XmlElement для извлечения необработанных значений для доступа в коде.

Для SoapExtension вы хотите посмотреть здесь: http://www.theserverside.net/tt/articles/showarticle.tss?id=SOAPExtensions

Для XmlElement вы хотите посмотреть здесь: http://www.tech -archive.net / Archive / DotNet / microsoft.public.dotnet.framework.webservices / 2006-09 / msg00028.html

...