1 远程WebServices:http://www.ayandy.com/Service.asmx 一般情况可以,有时会出现不能连接
2 创建WPF项目WpfWeather,并且添加WebServices引用到项目中Service1,app.config文件内容
有时候自动生成的会有另外一个binding 和endpoint ,导致出现错误,删除就好了
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="ServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://www.ayandy.com/Service.asmx" binding="basicHttpBinding"
bindingConfiguration="ServiceSoap" contract="Service1.ServiceSoap"
name="ServiceSoap" />
</client>
</system.serviceModel>
</configuration>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="ServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://www.ayandy.com/Service.asmx" binding="basicHttpBinding"
bindingConfiguration="ServiceSoap" contract="Service1.ServiceSoap"
name="ServiceSoap" />
</client>
</system.serviceModel>
</configuration>
3 设计xaml文件界面:
<Window x:Class="WpfWeather.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<Window.Resources>
<DataTemplate x:Key="ComboBoxTemplate">
<Label Content="{Binding Path=Name}"></Label>
</DataTemplate>
</Window.Resources>
<Grid>
<Canvas Margin="18,16,16,19" Name="canvas1">
<ComboBox Canvas.Left="0" Canvas.Top="11" Height="34" Width="138" ItemsSource="{Binding}" Name="cbcity" SelectionChanged="cbcity_SelectionChanged">
<ComboBox.ItemTemplate>
<StaticResource ResourceKey="ComboBoxTemplate"></StaticResource>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Canvas.Left="8" Canvas.Top="55" Height="161" Name="tbDetail" Width="228" TextWrapping="Wrap"/>
<ComboBox Canvas.Left="153" Canvas.Top="11" Height="34" Name="cbdate" Width="91" SelectionChanged="cbdate_SelectionChanged">
<ComboBoxItem>Today</ComboBoxItem>
<ComboBoxItem>Tomorrow</ComboBoxItem>
<ComboBoxItem>AfterTomorrow</ComboBoxItem>
</ComboBox>
</Canvas>
</Grid>
</Window>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
<Window.Resources>
<DataTemplate x:Key="ComboBoxTemplate">
<Label Content="{Binding Path=Name}"></Label>
</DataTemplate>
</Window.Resources>
<Grid>
<Canvas Margin="18,16,16,19" Name="canvas1">
<ComboBox Canvas.Left="0" Canvas.Top="11" Height="34" Width="138" ItemsSource="{Binding}" Name="cbcity" SelectionChanged="cbcity_SelectionChanged">
<ComboBox.ItemTemplate>
<StaticResource ResourceKey="ComboBoxTemplate"></StaticResource>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Canvas.Left="8" Canvas.Top="55" Height="161" Name="tbDetail" Width="228" TextWrapping="Wrap"/>
<ComboBox Canvas.Left="153" Canvas.Top="11" Height="34" Name="cbdate" Width="91" SelectionChanged="cbdate_SelectionChanged">
<ComboBoxItem>Today</ComboBoxItem>
<ComboBoxItem>Tomorrow</ComboBoxItem>
<ComboBoxItem>AfterTomorrow</ComboBoxItem>
</ComboBox>
</Canvas>
</Grid>
</Window>
4 后台代码,从WebServices取值和给页面赋值:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WpfWeather.Service1;
using System.Data;
using System.IO;
namespace WpfWeather
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
try
{
if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + "/city.xml"))
{
DataSet dsCity = new DataSet();
dsCity.ReadXml(AppDomain.CurrentDomain.BaseDirectory + "/city.xml");
cbcity.DataContext = dsCity.Tables[0];
}
else
{
ServiceSoapClient ssc = new ServiceSoapClient();
string[] citys = ssc.getSupportCity("all");
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("ID", typeof(System.String));
dt.Columns.Add(dc);
dc = new DataColumn("Name", typeof(System.String));
dt.Columns.Add(dc);
for (int i = 0; i < citys.Length; i++)
{
dt.Rows.Add(new object[] { i, citys[i] });
}
DataSet ds = new DataSet();
ds.Tables.Add(dt);
ds.WriteXml(AppDomain.CurrentDomain.BaseDirectory + "/city.xml");
cbcity.DataContext = dt;
}
}
catch (Exception ex)
{
tbDetail.Inlines.Clear();
tbDetail.Inlines.Add(new Run(ex.ToString()));
}
}
private void cbcity_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
tbDetail.Inlines.Clear();
GetDetail();
}
private void GetDetail()
{
try
{
string city = ((DataRowView)cbcity.SelectedItem).Row.ItemArray[1].ToString();
ServiceSoapClient ssc = new ServiceSoapClient();
string[] weather = new string[8];
if (cbdate.SelectedIndex != -1)
{
string DayFlag = ((ComboBoxItem)cbdate.SelectedItem).Content.ToString();
switch (DayFlag)
{
case "Today":
weather = ssc.getWeatherbyCityName(city, theDayFlagEnum.Today);
break;
case "Tomorrow":
weather = ssc.getWeatherbyCityName(city, theDayFlagEnum.Tomorrow);
break;
case "AfterTomorrow":
weather = ssc.getWeatherbyCityName(city, theDayFlagEnum.theDayafterTomorrow);
break;
}
}
else
{
weather = ssc.getWeatherbyCityName(city, theDayFlagEnum.Today);
}
for (int i = 0; i < weather.Length; i++)
{
tbDetail.Inlines.Add(new Run(weather[i]));
if (i != weather.Length - 1)
{
tbDetail.Inlines.Add(new LineBreak());
}
}
}
catch (Exception ex)
{
tbDetail.Inlines.Add(new Run(ex.ToString()));
}
}
private void cbdate_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
tbDetail.Inlines.Clear();
if (cbcity.SelectedIndex != -1)
{
GetDetail();
}
else
{
return;
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WpfWeather.Service1;
using System.Data;
using System.IO;
namespace WpfWeather
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
try
{
if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + "/city.xml"))
{
DataSet dsCity = new DataSet();
dsCity.ReadXml(AppDomain.CurrentDomain.BaseDirectory + "/city.xml");
cbcity.DataContext = dsCity.Tables[0];
}
else
{
ServiceSoapClient ssc = new ServiceSoapClient();
string[] citys = ssc.getSupportCity("all");
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("ID", typeof(System.String));
dt.Columns.Add(dc);
dc = new DataColumn("Name", typeof(System.String));
dt.Columns.Add(dc);
for (int i = 0; i < citys.Length; i++)
{
dt.Rows.Add(new object[] { i, citys[i] });
}
DataSet ds = new DataSet();
ds.Tables.Add(dt);
ds.WriteXml(AppDomain.CurrentDomain.BaseDirectory + "/city.xml");
cbcity.DataContext = dt;
}
}
catch (Exception ex)
{
tbDetail.Inlines.Clear();
tbDetail.Inlines.Add(new Run(ex.ToString()));
}
}
private void cbcity_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
tbDetail.Inlines.Clear();
GetDetail();
}
private void GetDetail()
{
try
{
string city = ((DataRowView)cbcity.SelectedItem).Row.ItemArray[1].ToString();
ServiceSoapClient ssc = new ServiceSoapClient();
string[] weather = new string[8];
if (cbdate.SelectedIndex != -1)
{
string DayFlag = ((ComboBoxItem)cbdate.SelectedItem).Content.ToString();
switch (DayFlag)
{
case "Today":
weather = ssc.getWeatherbyCityName(city, theDayFlagEnum.Today);
break;
case "Tomorrow":
weather = ssc.getWeatherbyCityName(city, theDayFlagEnum.Tomorrow);
break;
case "AfterTomorrow":
weather = ssc.getWeatherbyCityName(city, theDayFlagEnum.theDayafterTomorrow);
break;
}
}
else
{
weather = ssc.getWeatherbyCityName(city, theDayFlagEnum.Today);
}
for (int i = 0; i < weather.Length; i++)
{
tbDetail.Inlines.Add(new Run(weather[i]));
if (i != weather.Length - 1)
{
tbDetail.Inlines.Add(new LineBreak());
}
}
}
catch (Exception ex)
{
tbDetail.Inlines.Add(new Run(ex.ToString()));
}
}
private void cbdate_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
tbDetail.Inlines.Clear();
if (cbcity.SelectedIndex != -1)
{
GetDetail();
}
else
{
return;
}
}
}
}