использование веб-сервиса с asp.net и C # - PullRequest
1 голос
/ 23 января 2011

Я изучаю asp.net и пытаюсь понять, как использовать веб-сервис.Я использую следующий файл wsdl

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

Я использую текстовое поле для ввода почтового индекса, добавил 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 ]

2 голосов
/ 23 января 2011

Наведите указатель мыши на вызов GetInfoByZIP, и вы должны увидеть, что он возвращает XmlNode. Поскольку не существует неявного преобразования из XmlNode в строку, вы не должны иметь возможность напрямую присваивать результат строке. Чтобы получить строковое значение, вызовите свойство XmlNode OuterXml , вот так (убедитесь, что у вас есть многострочный текстовый элемент управления):

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

Согласно WSDL, вызов возвращает GetInfoByZipResult, который может содержать любой XML (без дополнительной спецификации в WSDL). XML, который я получаю, выглядит как XML ниже. Итак, если вы хотите получить название города, штата и т. Д., Вам нужно будет проанализировать 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>
0 голосов
/ 23 января 2011

Вы можете либо присвоить result свойству Text элемента управления (например, Literal, либо Label), либо использовать Response.Write().Присвоение его элементу управления является лучшим способом, поскольку его просто закачка в поток ответов, вероятно, не приведет к отображению того, где и как вы хотите.

На странице aspx вы должны добавитьcontrol:

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

И в конце вашего Button1_Click события присвойте result свойству этого литерала Text:

postCodeInfo.Text = result;

Также во второй строке яЯ предполагаю, что zipcode.Text является строкой, поэтому вам не нужно снова вызывать ToString() (если это не строка, может быть, вы делаете).

...