从Web服务中读取XML或对象

时间:2014-06-06 14:55:01

标签: c# xml web-services

这是我第一次使用网络服务而且我有点迷失了。 我成功调用了函数,但我只能从中获取一个值 服务。我读到最简单的方法是读取xml或创建对象 然后调用他们的值。目前我使用返回所需的函数 价值,但我需要打电话给他们3次,以获得所有的数据,这是浪费时间 和资源。我尝试使用URL调用该服务并将其用作网站 或者在不导入程序的情况下使服务以相同的方式工作。 问题是我无法找到将值传递到url的方法,因为这样 我只得到空白页。从服务中获取数据的最快方法是什么? 如果城市有效,我需要城市名称,温度和旗帜。我需要通过拉链 代码到服务。

谢谢。

我当前的代码

wetther.Weather wether = new wetther.Weather();

        string farenhait = wether.GetCityWeatherByZIP(zip).Temperature;
        string city = wether.GetCityWeatherByZIP(zip).City;
        bool correct = wether.GetCityWeatherByZIP(zip).Success;

我试过这种方式

// Retrieve XML document  
XmlTextReader reader = new XmlTextReader("http://xml.weather.yahoo.com/forecastrss?p=94704");  

// Skip non-significant whitespace  
reader.WhitespaceHandling = WhitespaceHandling.Significant;  

// Read nodes one at a time  
while (reader.Read())  
{  
    // Print out info on node  
    Console.WriteLine("{0}: {1}", reader.NodeType.ToString(), reader.Name);  
}  

这个适用于雅虎页面但不适合我的。

我需要使用此网络服务 - > http://wsf.cdyne.com/WeatherWS/Weather.asmx

3 个答案:

答案 0 :(得分:2)

最好的方法是在项目中添加对Web服务的引用。从这里,您将能够查询Web服务,就像它是您项目中的类一样。右键单击Solution Explorer中的项目,然后点击Add Service Reference。然后,您可以将Web服务URL复制并粘贴到对话框中。

然后你可以这样查询......

Weather.WeatherSoapClient w = new Weather.WeatherSoapClient();

Weather.ForecastReturn f = w.GetCityForecastByZIP("12345");

string farenhait = f.Temperature;
string city = f.City;
bool correct = f.Success;

基本上你正在做的是每次都触发HTTP请求。您需要做的是将单个请求放入一个对象(f),然后您可以检索其属性。

答案 1 :(得分:1)

WeatherServiceRef.WeatherSoapClient weatherSoapClient = new WeatherSoapClient("WeatherSoap");

WeatherServiceRef.ForecastReturn forecastRet = weatherSoapClient.GetCityForecastByZIP("90210"); //enter valid zip string

foreach (Forecast forecast in forecastRet.ForecastResult)    
    {
    Console.WriteLine("\nForecast {0}", forecast.WeatherID);
    Console.WriteLine ("Temperature (morning low): {0}", forecast.Temperatures.MorningLow);
    Console.WriteLine("Temperature (morning high): {0}", forecast.Temperatures.DaytimeHigh);
    Console.WriteLine("Probability of precipitation (daytime): {0}", forecast.ProbabilityOfPrecipiation.Daytime)
    //insert other code to retrieve values here
   }

Console.ReadLine();

您可以使用右键单击添加服务将服务引用添加到Web服务。在我的情况下,我已经调用了服务引用WeatherServiceRef。

答案 2 :(得分:1)

我用@MichaelCoxes回答并想出了。完美运作

        degress.TempConvert todegress = new degress.TempConvert();
        wetther.Weather wether = new wetther.Weather();

        wetther.WeatherReturn f = wether.GetCityWeatherByZIP("10001");

        string city = f.City;
        bool correct = f.Success;
        string farenhait = f.Temperature;