使用asp.net和C#消费webservice

时间:2011-01-23 01:01:47

标签: c# web-services asmx

我正在学习asp.net,并尝试理解使用Web服务。我使用以下wsdl文件

http://www.webservicex.net/uszip.asmx?WSDL

我正在使用文本框输入zipcode,在web引用中添加了wsdl,并使用C#来检索数据。数据结构如下:

http://www.webservicex.net/uszip.asmx/GetInfoByZIP

我无法理解如何在网页上显示结果。以下代码是我现在所拥有的..

protected void Button1_Click(object sender, EventArgs e)
{
    USZip s1 = new USZip();
    var input = zipcode.Text.ToString();
    String result = s1.GetInfoByZIP(input);

}

如果有人能给我提供有用的指示,那将是很棒的

非常感谢

2 个答案:

答案 0 :(得分:2)

将鼠标悬停在对GetInfoByZIP的调用上,您会看到它返回一个XmlNode。由于没有从XmlNode到字符串的隐式转换,因此您不能将结果直接分配给字符串。要获取字符串值,请调用XmlNode属性 OuterXml ,如下所示(确保您有多行文本控件):

XmlNode result = s1.GetInfoByZIP(input);    
YourTextControl.Text = result.OuterXml;

根据WSDL,调用返回一个GetInfoByZipResult,它可以包含任何XML(WSDL中没有进一步的规范)。我得到的XML看起来像下面的XML。因此,如果您想要获取City,State等的名称,则需要解析XML。

<NewDataSet xmlns="">
  <Table>
    <CITY>Glendale</CITY> 
    <STATE>CA</STATE> 
    <ZIP>91210</ZIP> 
    <AREA_CODE>818</AREA_CODE> 
    <TIME_ZONE>P</TIME_ZONE> 
  </Table>
</NewDataSet>

答案 1 :(得分:0)

您可以将result指定给控件的Text属性(例如文字或标签),也可以使用Response.Write()。将它分配给控件是一种更好的方法,因为将其抽出到响应流可能不会将它显示在您想要的位置和方式。

在您的aspx页面中,您应该添加一个控件:

<asp:Literal Id="postCodeInfo" runat="server"></asp:Literal>

Button1_Click事件结束时,将result分配给该文字的Text媒体资源:

postCodeInfo.Text = result;

同样在第二行,我假设zipcode.Text是一个字符串,所以你不需要再次调用ToString()(如果它不是字符串,也许你做)。