2014-02-11 119 views
0

我正在爲使用c#的公司編寫Web服務。所以我有一個測試頁面default.aspx。 從aspx頁面我有一個輸入名稱=「zip」,我需要傳遞給web服務。 我無法弄清楚如何獲取發佈的數據。 Webservice將根據以xml形式傳遞的郵政編碼運行sql語句。然後返回郵政編碼xml作爲迴應。c#asmx web服務。如何從aspx頁面讀取發佈數據

代碼來自aspx頁面下方。

string sendXml = String.Format(@"<?xml version=""1.0"" encoding=""utf-8""?>, 
          <zip>{0}</zip>", 
           Request["zip"]); 
       string postXml = "xmlRequest=" + HttpUtility.UrlEncode(sendXml); 
       HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:51857/zipfinder.asmx/showRecords"); 
       req.Method = "POST"; 
       req.ContentLength = postXml.Length; 
       req.ContentType = "application/x-www-form-urlencoded"; 

       using (StreamWriter writer = new StreamWriter(req.GetRequestStream())) 
       { 
        writer.Write(postXml); 
        writer.Close(); 
       } 

       var result = ""; 
       try 
       { 
        using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream())) 
        { 
         string getResult = reader.ReadToEnd(); 
         Response.Write(getResult); 
        } 
       } 
       catch (Exception ex) 
       { 
        Response.Write("error: " + ex.ToString()); 
       } 

那麼的.asmx頁面上

[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
     public DataSet getZip() {    
      DataSet dataSet = db.QueryDataRows("*", "zip_codes_simple", "zip = '00501' or zip = '00544'", "", "zip_codes_simple"); 
      return dataSet; 
     } 

     [WebMethod] 
     public XmlDocument showRecords(){ 
      DataSet dataSet = getZip(); 
      string recs = ""; 
      XmlDocument doc = new XmlDocument(); 
      XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null); 
      doc.AppendChild(dec); 
      XmlNode root = doc.CreateElement("zipcodes"); 
      doc.AppendChild(root); 
      XmlElement zip = doc.CreateElement("zip"); 
      XmlElement type = doc.CreateElement("type"); 
      XmlElement primaryCity = doc.CreateElement("primaryCity"); 
      XmlElement state = doc.CreateElement("state"); 
      XmlElement latitude = doc.CreateElement("latitude"); 
      XmlElement longitude = doc.CreateElement("longitude"); 

      foreach (DataTable dt in dataSet.Tables) 
      { 
       if (dt.Rows.Count > 0) 
       { 
        foreach (DataRow dr in dt.Rows) 
        { 
         zip.InnerText = dr["zip"].ToString(); 
         root.AppendChild(zip); 
         type.InnerText = dr["type"].ToString(); 
         root.AppendChild(type); 
         primaryCity.InnerText = dr["primary_city"].ToString(); 
         root.AppendChild(primaryCity); 
         state.InnerText = dr["state"].ToString(); 
         root.AppendChild(state); 
         latitude.InnerText = dr["latitude"].ToString(); 
         root.AppendChild(latitude); 
         longitude.InnerText = dr["longitude"].ToString(); 
         root.AppendChild(longitude); 
         //recs = "<p>" + dr["zip"] + ", " + dr["primary_city"] + "</p>"; 
         //Response.Write("<p>" + dr["zip"] + " in " + dr["state"]); 
        } 
       } 
       else 
       { 
        //recs = "<p style='color: red;'>Invalid user name or password</p>"; 
       } 
      } 

      return doc; 
     } 

我怎樣才能從ASPX頁面獲得郵政編碼傳遞給查詢,其中拉鍊=「」 我在尋找的東西閱讀格式化的字符串並從傳入的xml文檔中提取郵政編碼。

任何幫助表示讚賞。 謝謝

回答

0

如果我理解它是正確的,您希望從您的頁面中獲得<input type='text' name='zip' />的值。因爲它不是一個asp:TextBox,你應該得到它使用Request.Form,所以你的代碼應該是這樣的:

string sendXml = String.Format(@"<?xml version=""1.0"" encoding=""utf-8""?>, 
          <zip>{0}</zip>", 
           Request.Form["zip"]); 

但還有另一種解決方案:不是這樣做的:

<input type='text' name='zip' /> 

你可以使用一個ASP.NET Webform控件:

<asp:TextBox runat='server' ID='zip' /> 

然後你可以用zip.Text得到值。

你有沒有任何理由不這樣做?

+0

是的,它是因爲我們有一個不支持內聯服務器標籤的cms。在asmx文件中有沒有方法可以調用xml郵政編碼。 aspx中的示例我可以使用Request [「field」],但是,我還沒有看到引用xml的方法。基本上我需要讀取該xml的內容,讀取一個字段並在sql中使用值聲明。 –

+0

好的,所以'Request [「zip」]'正在工作?如果不是,請嘗試'Request.Form [「zip」]'。要從XML文檔中提取信息,可以使用xPath,例如'/ zipcodes/zip'將匹配'zipcode'內的所有'zip'。由於變量'string getResult = reader.ReadToEnd();'包含響應XML,因此可以將其加載到XmlDocument中,然後使用doc.SelectNodes(「/ xpath/to/node」)執行查詢。我不確定我是否理解你的問題。 –