我正在学习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);
}
如果有人能给我提供有用的指示,那将是很棒的
非常感谢
答案 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()
(如果它不是字符串,也许你做)。