简体   繁体   English

如何从webservice请求返回原始xml?

[英]How to get the raw xml returned from a webservice request?

Does anyone know of a simple way of getting the raw xml that is returned from querying a webservice? 有谁知道获取从查询Web服务返回的原始xml的简单方法?

I have seen a way of doing this via Web Services Enhancements , but I don't want an added dependency. 我已经看到了通过Web服务增强功能实现此目的的一种方法,但我不希望添加依赖项。

You have two real options. 你有两个真正的选择。 You can create a SoapExtension that will insert into the response stream and retrieve the raw XML or you can alter your proxy stubs to use XmlElement to retrieve the raw values for access in code. 您可以创建一个SoapExtension,它将插入到响应流中并检索原始XML,或者您可以更改代理存根以使用XmlElement来检索代码中访问的原始值。

For SoapExtension you want to be looking here: http://www.theserverside.net/tt/articles/showarticle.tss?id=SOAPExtensions 对于SoapExtension,您希望在此处查看: http//www.theserverside.net/tt/articles/showarticle.tss?id = SAPExtensions

For XmlElement you want to look here: http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.webservices/2006-09/msg00028.html 对于XmlElement,您需要查看此处: http//www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.webservices/2006-09/msg00028.html

So, here's the way I ended up doing it. 所以,这就是我最终做到的方式。 The scenario is that a user clicks a button and wants to see the raw XML that a webservice is returning. 场景是用户单击按钮并希望查看Web服务返回的原始XML。 This will give you that. 这会给你这个。 I ended up using an xslt to remove the namespaces that get generated. 我最终使用xslt来删除生成的命名空间。 If you don't, you end up with a bunch of annoying namespaces attributes in the XML. 如果不这样做,最终会在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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM