如何修改Web服务代理以获取Raw XML

时间:2009-02-05 17:57:00

标签: c# .net xml web-services

这是为我正在尝试访问的Web服务创建的代理方法。我将如何修改它以从Web服务调用中获取原始XML?

        /// <remarks/>
    [System.Web.Services.Protocols.SoapHeaderAttribute("CallOptionsValue")]
    [System.Web.Services.Protocols.SoapHeaderAttribute("MruHeaderValue")]
    [System.Web.Services.Protocols.SoapHeaderAttribute("SessionHeaderValue")]
    [System.Web.Services.Protocols.SoapHeaderAttribute("QueryOptionsValue")]
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace = "urn:partner.soap.sforce.com", ResponseNamespace = "urn:partner.soap.sforce.com", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    [return: System.Xml.Serialization.XmlElementAttribute("result")]
    public QueryResult query(string queryString)
    {
        object[] results = this.Invoke("query", new object[] {
                    queryString});
        return ((QueryResult)(results[0]));
    }

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

幸运的是,有一种很好的方法,只需修改生成的代理类,使其从不同的基础继承。替代实现来自Web Services Enhancements 3.0包:

Microsoft.Web.Services3.WebServicesClientProtocol

在类中,你将在范围内拥有RequestSoapContext.Envelope.InnerXml和ResponseSoapContext.Envelope.InnerXml - 这正是你所需要的。

答案 1 :(得分:2)

如果您只想使用Fiddler Web Debugging tools进行转储。

如果您想真正检索/处理原始XML,那么代理方法将无法帮助您。为Web服务创建System.Net.HttpWebRequest,调用它,并检索纯XML响应。格式/结构可以在.ASPX页面或Web服务文档中找到。

答案 2 :(得分:0)

嗯,据我所知,我的一个伙伴,曾经使用常规的ASMX网络服务,而且非常黑客......

如何序列化返回XML的结果?这可能会成功......

某些事情(完全未经测试和记忆):

MemoryStream stm = new MemoryStream();
XmlSerializer xmlSer = new XmlSerializer(typeof(QueryResult));
xmlSer.Serialize(stm, queryResult);

那会有用吗?

马克