2012-04-17 10 views
0

私は.Net Webサービスプログラミングにはとても新しいです。私は、WebサービスからクライアントにXML応答を読み込むのに苦労しています。 Service1.asmx.csコード::私のWebサービス側でXMLレスポンスwebserviceを読む

ここで

[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; 

    } 

、私は応答をテストするための2つのメソッドを作成します。 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は暗黙のうちに 'オブジェクト'を '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の新しいインスタンスを次の行に置き換えて初期化する必要はありません。明示的にキャストしてみてください。xmltext =(XmlDocument)web2.GetXML() – tomasmcguinness

+1

publicオブジェクトGetXML()をpublic XmlDocument GetXML()に変更しましたか?その場合は、再度サービスへの参照を追加する必要があります – Reniuz

+0

こんにちはTomasmcguinness、それはpublic 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はユーザーコードによって処理されませんでした。 xmltest =(XmlDocument_web2.GetXML(); – QLiu

+0

)コードにアクセスできるかどうかをデバッグする必要があります。 –

+0

デバッグしようとしましたが、http:// localhost:50228/Service1を使用してXMLに直接アクセスすることはできません。 asmx/GetXML – QLiu

0

あなたは、サービス参照を削除してみてくださいサービスを再実行して、クライアントにサービス参照を追加する必要があります。