WebService
Børre Stenseth
Moduler>Webservices>Værobservasjon

Værobservasjoner

Hva
Image1
Bruk av en webservice med værobservasjoner

Værobservasjoner er en type tjeneste som både i format og funksjon egner seg for distribusjon via webservices. Det finnes en del som tilbyr denne tjenesten.

I denn modulen er det skrevet et enkelt program som bruker en tjeneste fra: WebserviceX.NET [1]

Dette er en av mange tjenester vi finner hos denne leverandøren.

Vi lager en vanlig Windows Applikasjon, kopler til webservicen som referanse og skriver følgende kode:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace wapp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            PostInitialize();
        }
        
        private void PostInitialize()
        {
            comboBox1.SelectedIndex=0;
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // user has selected a country
            String CountryName = 
                comboBox1.Items[comboBox1.SelectedIndex].ToString();
            listBox1.Items.Clear();
            try
            {
                String S = globalWeather1.GetCitiesByCountry(CountryName);
                
                // testing and raw output
                testBox1.Text = S; 
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(S);              
                XmlNodeList list = doc.GetElementsByTagName("City");
                for (int ix = 0; ix < list.Count; ix++)
                {
                    listBox1.Items.Add(list[ix].InnerText);
                }
            }
            catch (Exception ex)
            {
                textBox2.Text = ex.Message;
            }
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // user has selected a city
            String cityName = 
                (String)listBox1.Items[listBox1.SelectedIndex].ToString();
            String CountryName = 
                comboBox1.Items[comboBox1.SelectedIndex].ToString();
            try
            {
                String S = globalWeather1.GetWeather(cityName, CountryName);
                
                // testing and raw output
                testBox1.Text = S;
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(S);
                doc.Normalize();
                XmlNode vaeret = doc.GetElementsByTagName("CurrentWeather")[0];
                XmlNodeList list = vaeret.ChildNodes;
                PresentWeather(list);
            }
            catch (Exception ex)
            {
                NoWeatherPresentation();
            }
        }
        private void PresentWeather(XmlNodeList list)
        {
            String T = "";
            for (int ix = 0; ix < list.Count; ix++)
            {
                String tagName = list[ix].Name;
                if(tagName.CompareTo("Location")==0)
                {
                    String tmp = list[ix].InnerText;
                    int pos = tmp.IndexOf(',');
                    if (pos != -1)
                        tmp = tmp.Substring(0, pos);
                    labelLocation.Text = tmp;
                }
               else if(tagName.CompareTo("Time")==0)
                {
                   String tmp = list[ix].InnerText;
                   int pos = tmp.IndexOf('/');
                   if(pos !=-1)
                       tmp = tmp.Substring(0,pos);
                   labelTime.Text = tmp;
                }
                else
                {
                    T += list[ix].Name;
                    T += list[ix].InnerText + "\r\n";
                }
            }
            textBox2.Text = T;
        }
        private void NoWeatherPresentation()
        {
            labelLocation.Text = 
                (String)listBox1.Items[listBox1.SelectedIndex].ToString();
            labelTime.Text = "";
            textBox2.Text = "Finner ikke data";
        }
        private void button1_Click(object sender, EventArgs e)
        {
            // toggle display of box with raw text
            testBox1.Visible = !testBox1.Visible;
        }
        private void linkLabel1_LinkClicked(object sender, 
            LinkLabelLinkClickedEventArgs e)
        {
            // link to service provider
            string target = "http://www.webservicex.net/";   
            try
            {
                System.Diagnostics.Process.Start(target);
            }
            catch (System.Exception other)
            {
                MessageBox.Show(other.Message);
            }
        }

     }
}
Referanser
  1. WebserviceX.NETwww.webservicex.net/WS/default.aspx14-03-2010
  1. WebserviceX.NETwww.webservicex.net/WS/default.aspx14-03-2010
  • Programmet:
    https://svn.hiof.no/svn/psource/Csharpspikes/useweather
Vedlikehold

B.Stenseth, januar 2007

(Velkommen) Moduler>Webservices>Værobservasjon (Survey)