C#调用WebService获取天气信息
概述
本文使用C#开发Winform应用程序,通过调用<WebXml/>(URL:http://www.webxml.com.cn)的WebService服务WeatherWS来获取天气预报数据。本程序所使用的Web服务的URL为:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx,此服务为“2400多个城市天气预报Web服务”。
开发环境说明:
- 系统平台:Windows 7(32bit);
- 开发工具:VS2010;
实现过程
本程序通过“添加Web引用”和“使用WSDL文件”两种方式实现WebService服务的调用。
1、添加Web引用
首先,新建一个WinForm应用程序,在“解决方案管理器”中为该工程添加Web引用:右击工程-->添加服务引用,弹出如下“服务引用设置”对话框:

点击该对话框“添加Web引用”按钮,弹出“Web引用”对话框,在其中的URL处输入WeatherWS服务地址(http://ws.webxml.com.cn/WebServices/WeatherWS.asmx),点击转到“-->”按钮,修改Web引用名为“WebRefWeather”,如下图所示:

此时,在需要获取天气信息的地方添加“获取天气核心代码”即可。我是在"按钮响应函数"中添加的,代码如下:
WebRefWeather.WeatherWS weather = new WebRefWeather.WeatherWS();
string[] str = new string[];
try
{
str = weather.getWeather("北京", "");
MessageBox.Show(str[] + "\n" + str[] + "\n" + str[] + "\n" + str[] + "\n" + str[], "天气信息");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
程序运行后,点击按钮,即可显示天气信息,如下图所示:

2、使用WSDL文件
此方法为通过使用VS工具由Web服务URL(http://ws.webxml.com.cn/WebServices/WeatherWS.asmx)或者本地的WeatherWS.asmx文件得到wsdl文件;然后由wsdl文件生成cs文件,即Web服务代理类,最后通过使用此类获取天气数据。即一下几步:
- asmx文件 --> wsdl文件(VS2010工具:disco);
- wsdl文件 --> cs文件(VS2010工具:wsdl);
首先,看一下disco工具的帮助,如下图所示:

通过如下命令,得到wsdl文件:
disco http://ws.webxml.com.cn/WebServices/WeatherWS.asmx
如下图所示:

然后,通过wsdl命令由wsdl文件生成cs文件,wsdl命令帮助如下:

生成cs文件的命令如下:
wsdl /l:cs /n:NS_WeatherWS /out:WeatherWS.cs WeatherWS.wsdl
即:

此时,将cs文件加入到新建的Winform工程中,再在按钮的响应函数中加入如下核心代码:
NS_WeatherWS.WeatherWS weather = new NS_WeatherWS.WeatherWS();
string[] str = new string[];
try
{
str = weather.getWeather("北京", "");
MessageBox.Show(str[] + "\n" + str[] + "\n" + str[] + "\n" + str[] + "\n" + str[], "天气信息");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
此时,运行程序,会出现如下错误:
命名空间“System.Web”中不存在类型或命名空间名称“Services”。是否缺少程序集?
解决办法:在该工程中添加DotNet引用System.Web.Services即可,如下图所示:

添加之后,再启动程序,程序即会启动成功。然后,点击按钮,即会像上一个方法一样显示天气信息,如下图所示:

C#调用WebService获取天气信息的更多相关文章
- Kettle通过Webservice获取天气信息
Kettle通过Webservice获取天气信息 需求: 通过kettle工具,通过webservice获取天气信息,写成xml格式文件. 思路: Kettle可通过两种选择获取webservic ...
- webservice获取天气信息
效果 1.eclipse中新建一个Java项目 2.通过命名获取天气的客户端信息 首先,打开天气网站http://ws.webxml.com.cn/WebServices/WeatherWS.asmx ...
- Java通过webservice接口获取天气信息
通过SOAP请求的方式获取天气信息并解析返回的XML文件. 参考: http://www.webxml.com.cn/WebServices/WeatherWS.asmx import java.io ...
- 内网公告牌获取天气信息解决方案(C# WebForm)
需求:内网公告牌能够正确显示未来三天的天气信息 本文关键字:C#/WebForm/Web定时任务/Ajax跨域 规划: 1.天定时读取百度接口获取天气信息并存储至Txt文档: 2.示牌开启时请求Web ...
- ajax无刷新获取天气信息
浏览器由于安全方面的问题,禁止ajax跨域请求其他网站的数据,但是可以再本地的服务器上获取其他服务器的信息,在通过ajax请求本地服务来实现: <?php header("conten ...
- Android实现自动定位城市并获取天气信息
定位实现代码: <span style="font-size:14px;">import java.io.IOException; import java.util.L ...
- 半吊子学习Swift--天气预报程序-获取天气信息
昨天申请的彩云天气Api开发者今天上午已审核通过  饭后运动过后就马不停蹄的来测试接口,接口是采用经纬度的方式来获取天气信息,接口地址如下 https://api.caiyunapp.com/v2/ ...
- java获取天气信息
通过天气信息接口获取天气信息,首先要给项目导入程序所需要的包,具体需要如下几个包: json-lib-2.4.jar ezmorph-1.0.6.jar commons-beanutils-1.8.3 ...
- 在C#中调用API获取网络信息和流量
原文 在C#中调用API获取网络信息和流量 最近一项目中要求显示网络流量,而且必须使用C#. 事实上,调用 IpHlpApi.dll 的 GetIfTable API 可以轻易获得网络信息和网络流量. ...
随机推荐
- cs11_c++_lab3
Matrix.hh class Matrix { int row; int col; int *p; void copy(const Matrix &m); void clearup(); p ...
- leetcode 190
190. Reverse Bits Reverse bits of a given 32 bits unsigned integer. For example, given input 4326159 ...
- java学习第13天( java获取当前时间,有关大数据的运算及精确数字运算,Date类)
一 java获取当前时间 学习一个函数,得到当前时间的准确值 System.currectTimeMillis(). 可以得到以毫秒为单位的当前时间.它主要用于计算程序运行时间,long start= ...
- Windows Server 2008下asp+access无法登陆问题总结
今日把一套陈旧的企业办公平台部署至公司新采购的服务器,因为在本机windows7环境已经反复测试通过.本以为分分钟完成的事情,结果折腾了我2天.服务器系统:windows server 2008 r2 ...
- thinkphp 配合mongodb
首先在config.php里面添加配合mongodb的数据库连接 'DB_TYPE'=>'mongo',// 数据库类型 'DB_HOST'=>'localhost',// 服务器地址 ' ...
- GPON和820.1p学习及资料(zt)
1)hw的两个PPT不错,GPON技术基础.ppt和10G-GPON技术基础.ppt, 介绍了GPON的知识背景,标准的名称,帧协议. 尤其是详细对比了10G-PON和G-PON的区别,以及演进的道路 ...
- SQL server 2005中的锁(1)
在之前的一片随笔中,简单的说了一下SQL Server中的隔离级别.而SQL Server的隔离级别是通过锁的机制来实现的.现在深入一下,谈谈SQL Server中的锁. 开始之前,先要定义一下前提: ...
- 【原】相煎何太急——input的blur事件与button的click事件
先来一段引子,最近在写手机h5页面,主要是一些登陆注册方面的,最绕不开的就是表单元素. 我想实现的是:在输入框后边有一个删除图标,当输入东西的时候触发事件,显示删除图标,点击该图标会删除之前输入的内容 ...
- c# 实现 java 的 System.currentTimeMillis() 值
本文地址:http://www.cnblogs.com/jying/p/3875331.html 以下一句即可实现 java 中的 System.currentTimeMillis() 值 , , , ...
- kendo ui 富文本编辑控件 Editor 实现本地上传图片,并显示
富文本编辑的组件有很多,大名鼎鼎的KENDO UI中自然也有,但是默认功能中,只能包含网络图片, 而如果要实现本地上传图片,KENDO UI也提供了相应的功能,但必须实现KENDO规定的多个接口, 而 ...