2012-04-17 10 views
0

.Net 웹 서비스 프로그래밍에 익숙하지 않습니다. 웹 서비스에서 클라이언트에게 XML 응답을 읽는 데 문제가 있습니다. 내 웹 서비스 측에서XML 응답 웹 서비스 읽기

: Service1.asmx.cs 코드 : 여기에서

[WebMethod(Description = "substruction")] 
    public double subtract(double i, double j) 
    { 
     return i - j; 
    } 


    [WebMethod(Description = "getxml")] 
    public XmlDocument GetXML() 
    { 
     StringBuilder sb = new StringBuilder(); 
     XmlWriter writer = XmlWriter.Create(sb); 

     writer.WriteStartDocument(); 
     writer.WriteStartElement("People"); 

     writer.WriteStartElement("Person"); 
     writer.WriteAttributeString("Name", "Nick"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("Person"); 
     writer.WriteStartAttribute("Name"); 
     writer.WriteValue("Kevin"); 
     writer.WriteEndAttribute(); 
     writer.WriteEndElement(); 

     writer.WriteEndElement(); 
     writer.WriteEndDocument(); 

     writer.Flush(); 

     XmlDocument xmlDocument = new XmlDocument(); 
     xmlDocument.LoadXml(sb.ToString()); 
     return xmlDocument; 

    } 

, 내가 응답을 테스트하기 위해 두 가지 방법을 만들 수 있습니다. GetXML에서는 매우 간단한 XML을 만들고 패키지 XML을 클라이언트에 반환합니다. 내 클라이언트 측에서

:

// Add button click function 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     string selectFlag = selectOper.Value; 
     localhost.Service1 web = new localhost.Service1(); // Have to be the same name as youre Service1. 
     if (selectFlag.Equals("+")) 
     { 
      Result.Text = (web.addition(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString(); 
     } 
     else if (selectFlag.Equals("-")) 
     { 
      Result.Text = (web.subtract(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString(); 
     } 

    } 

    protected void Button2_Click(object sender, EventArgs e) 
    { 


     localhost.Service1 web2 = new localhost.Service1(); // Can u please do not be so silly, use different instance name here. 
     Button clickedButton = (Button)sender; 

     XmlDocument xmltest = new XmlDocument(); 
     xmltest = web2.GetXML(); 

당신은 내가 web2.GetXML를 얻기 위해 노력 볼 수있다() XmlDoucment에 전체 XML을 얻을. 그러나 오류 1은 암시 적으로 'object'유형을 'System.Xml.XmlDocument'로 변환 할 수 없습니다. 명시 적 변환이 존재합니까? C : \ Documents and Settings \ qili \ My Documents \ Downloads \ WebService3 \ WebService2 \ WebService2 \ Default.aspx.cs 39 24 WebService2

뭔가 잘못하고있다. 하지만 Buttom1_Click 메서드는 정상적으로 작동합니다.

+0

디버거를 사용하여 GetXML()이 반환 한 실제 유형을 확인 했습니까? 또한 다음 줄에서 XmlDocument를 교체 할 때 XmlDocument의 새 인스턴스를 초기화 할 필요가 없습니다. 명시 적으로 캐스팅을 시도해 볼 수 있습니다. xmltext = (XmlDocument) web2.GetXML() – tomasmcguinness

+1

'public object GetXML()'을'public XmlDocument GetXML()'으로 변경 했습니까? 그렇다면 서비스에 대한 참조를 다시 추가해야합니다. – Reniuz

+0

안녕하세요 Tomasmcguinness, 그것은 공개 XmlDocument GetXML() XmlDocument입니다. – QLiu

답변

0

서비스의 응답을 변환하려고 :

protected void Button2_Click(object sender, EventArgs e) 
    { 


    localhost.Service1 web2 = new localhost.Service1(); // Can u please do not be so silly, use different instance name here. 
    Button clickedButton = (Button)sender; 
    XmlDocument xmltest = new XmlDocument(); 
    xmltest = (XmlDocument)web2.GetXML(); 
    } 
+0

안녕하세요, 버튼을 클릭하면 예외가 발생합니다. NotImplementedException은 사용자 코드에 의해 처리되지 않았습니다. in xmltest = (XmlDocument_web2.GetXML(); – QLiu

+0

) 코드에 액세스 할 수 있는지 여부를 디버그해야합니다. –

+0

디버깅하려고했는데 http : // localhost : 50228/Service1을 사용하여 XML에 직접 액세스 할 수 없습니다. asmx/GetXML – QLiu

0

당신은, 서비스 참조를 삭제 시도 서비스를 다시 실행하고 클라이언트에 서비스 참조를 추가해야합니다.