2009-02-05 3 views
3

다음은 액세스하려는 웹 서비스에 대해 생성 된 프록시 메소드입니다. 웹 서비스 호출에서 원시 XML을 가져 오기 위해 수정하는 방법은 무엇입니까?원시 XML을 얻기 위해 webservice 프록시를 수정하는 방법

 /// <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

다행히도 좋은 방법이 있습니다. 생성 된 프록시 클래스를 수정하여 다른 기반을 상속합니다. 대안 구현은 웹 서비스 향상 3.0 팩에서 온다 :

Microsoft.Web.Services3.WebServicesClientProtocol

를 클래스는 범위에 RequestSoapContext.Envelope.InnerXml 및 ResponseSoapContext.Envelope.InnerXml있을 것이다에 - 그것은 정확하게 당신이 필요합니다.

0

글쎄, 지금까지의 내가이 한 번 정기적으로 ASMX의 웹 서비스와 함께, 그것은 꽤 해킹했다 .... 그 광산의 친구를 기억하는

어떻게 당신이 다시 XML로 얻을 결과를 직렬화에 대해?

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

것이라고 작업 : 그건 ... (완전히 테스트되지 않은 메모리에서)의 라인을 따라

뭔가 트릭을 할 수 있는가? 마크

2

그냥 Fiddler Web Debugging tools를 사용하여 덤프을 원하는 경우

.

원시 XML을 실제로 검색/처리하려면 프록시 방법이 도움이되지 않습니다. 웹 서비스에 대한 System.Net.HttpWebRequest를 만들고 호출하고 순수한 XML 응답을 검색하십시오. 형식/구조는 .ASPX 페이지 또는 웹 서비스 설명서에서 찾을 수 있습니다.

+0

피들러는 환상적입니다. 감사합니다! –

관련 문제