需求:内网公告牌能够正确显示未来三天的天气信息

本文关键字:C#/WebForm/Web定时任务/Ajax跨域

规划:

1、天定时读取百度接口获取天气信息并存储至Txt文档;

2、示牌开启时请求WebService,获取天气信息;

解决方案:

1、在Global.asax中能够配置整个工程不同情况下触发的事件,其中 Application_Start方法是在iis启动本项目时就开始的进程。在本方法下写入定时从百度读取天气信息的代码,调用的WebService代码在下面的第2部分:

  

protected void Application_Start(object sender, EventArgs e)
{
String NowTime = DateTime.Now.ToString("hh24:mi:ss");
//定时任务
//if (NowTime == "")
//{
WebService1 ws = new WebService1();
ws.GetBaiduWeather();
//}
//每天执行一次
Timer t = new Timer(60 * 60 * 24 * 1000);
t.Elapsed += new System.Timers.ElapsedEventHandler(DownLoadWeather);
t.Enabled = true; }

  WebService代码如下

[WebMethod]
public void GetBaiduWeather()
{
string callback = HttpContext.Current.Request["jsoncallback"];
WeatherDownload.getrequest();
HttpContext.Current.Response.Write(callback +
"({result:'true'})");
HttpContext.Current.Response.End();
}

  调用百度天气接口存储数据的代码如下所示,其存储的结果是Json字符串。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions; namespace WebService
{
public static class WeatherDownload
{
public static string url = "http://apis.baidu.com/apistore/weatherservice/recentweathers";
public static string param = "cityname=石家庄&cityid=101090101";
/// <summary>
/// 查询天气情况
/// </summary>
/// <param name="url"></param>
public static void getrequest()
{
string strURL = url + '?' + param;
System.Net.HttpWebRequest request;
request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
request.Method = "GET";
request.Headers.Add("apikey", "在百度上申请的开发者个人码");
System.Net.HttpWebResponse response;
response = (System.Net.HttpWebResponse)request.GetResponse();
System.IO.Stream s;
s = response.GetResponseStream();
string StrDate = "";
string strValue = "";
StreamReader Reader = new StreamReader(s, Encoding.UTF8);
while ((StrDate = Reader.ReadLine()) != null)
{
strValue += StrDate + "\r\n";
}
if (File.Exists(System.AppDomain.CurrentDomain.BaseDirectory + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt"))
{
}
else
{
using (File.Create(System.AppDomain.CurrentDomain.BaseDirectory + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt"))
{
}
}
FileStream fs = new FileStream(System.AppDomain.CurrentDomain.BaseDirectory + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
String w = UnicodeToStr(strValue);
sw.Write(w);
sw.Flush();
sw.Close();
fs.Close();
}
/// <summary>
/// 编码为汉字
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string UnicodeToStr(string str)
{
string outStr = "";
Regex reg = new Regex(@"(?i)\\u([0-9a-f]{4})");
outStr = reg.Replace(str, delegate(Match m1)
{
return ((char)Convert.ToInt32(m1.Groups[1].Value, 16)).ToString();
});
return outStr;
}
}
}

2、页面请求WebService获取天气数据

  此处使用的Ajax请求,特征是跨域请求,当时出的问题比较多,一篇很好的参考文献如下(http://www@suchso@com/projecteactual/jquery-ajax-parsererror-was-not-called.html)(请把@改为.)

$.ajax({
        //111.111.111.111为实际
url: "http://111.111.111.111/WebService1.asmx/GetWeather?jsoncallback=?",
dataType: "jsonp",
success: OnSuccess,
error: OnError
});
//}
function OnSuccess(json) {
$("#today").text(json.retData.today.curTemp.toString())
$("#today_wth").text(json.retData.today.type.toString())
}
function OnError(XMLHttpRequest, textStatus, errorThrown) {
alert("Something error");
}

  对应的WebService代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.IO;
using System.Text;
namespace WebService
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public void GetWeather()
{
String sr = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + DateTime.Now.ToString("yyyyMMdd") + ".txt", UnicodeEncoding.GetEncoding("UTF-8")); string callback = HttpContext.Current.Request["jsoncallback"];
HttpContext.Current.Response.Write(callback + "(" + sr + ")");
} }
}

内网公告牌获取天气信息解决方案(C# WebForm)的更多相关文章

  1. C#调用WebService获取天气信息

    概述 本文使用C#开发Winform应用程序,通过调用<WebXml/>(URL:http://www.webxml.com.cn)的WebService服务WeatherWS来获取天气预 ...

  2. Java通过webservice接口获取天气信息

    通过SOAP请求的方式获取天气信息并解析返回的XML文件. 参考: http://www.webxml.com.cn/WebServices/WeatherWS.asmx import java.io ...

  3. ESP32 IDF 获取天气信息

    一.注册天气获取账号 我使用的知心天气,没有获取天气账号的小伙伴可以去注册一下,知心天气官网:https://www.seniverse.com/ 取得天气获取的API后,可以直接在浏览器中访问测试一 ...

  4. 半吊子学习Swift--天气预报程序-获取天气信息

    昨天申请的彩云天气Api开发者今天上午已审核通过  饭后运动过后就马不停蹄的来测试接口,接口是采用经纬度的方式来获取天气信息,接口地址如下 https://api.caiyunapp.com/v2/ ...

  5. java获取天气信息

    通过天气信息接口获取天气信息,首先要给项目导入程序所需要的包,具体需要如下几个包: json-lib-2.4.jar ezmorph-1.0.6.jar commons-beanutils-1.8.3 ...

  6. Kettle通过Webservice获取天气信息

      Kettle通过Webservice获取天气信息 需求: 通过kettle工具,通过webservice获取天气信息,写成xml格式文件. 思路: Kettle可通过两种选择获取webservic ...

  7. ajax无刷新获取天气信息

    浏览器由于安全方面的问题,禁止ajax跨域请求其他网站的数据,但是可以再本地的服务器上获取其他服务器的信息,在通过ajax请求本地服务来实现: <?php header("conten ...

  8. Android实现自动定位城市并获取天气信息

    定位实现代码: <span style="font-size:14px;">import java.io.IOException; import java.util.L ...

  9. java解析xml实例——获取天气信息

    获取xml并解析其中的数据: package getweather.xml; import java.io.IOException; import java.util.HashMap; import ...

随机推荐

  1. ZACC_DOCUMENT

    method if_ex_acc_document~change. data: wa_extension type bapiparex, ext_value() type c, wa_accit ty ...

  2. 机器学习实战knn

    最近在学习这本书,按照书上的实例编写了knn.py的文件,使用canopy进行编辑,用shell交互时发现运行时报错: >>> kNN.classify0([0,0],group,l ...

  3. ThinkPHP 3.2.3(一)基础

    一.安装 ThinkPHP无需任何安装,直接拷贝到你的电脑或者服务器的WEB运行目录下面即可. 如:我使用的是XAMPP集成环境,将框架解压缩到htdocs目录下即可.   二.目录结构 1.初始目录 ...

  4. 第一章 UI实战开发 UIWindow UIView

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  5. UITableViewCell 顶格

    首先在ViewDidLoad 或者ViewWillAppear里边写 if ([_tabView respondsToSelector:@selector(setSeparatorInset:)]) ...

  6. BZOJ3000 Big Number

    由Stirling公式: $$n! \approx \sqrt{2 \pi n} (\frac{n}{e})^n$$ 故:$$\begin{align} ans &= log_k n! + 1 ...

  7. LookUpEdit手动编辑怎么设置呢?

    近来遇到一问题,用LookUpEdit控件时,无法进行手动删除上面的数据,为此查找资料进行修改: 解决方法如下:LookUpEdit的属性-->Properties->TextEditSt ...

  8. TortoiseGit流程安装使用手册

    end if

  9. 掌握Redmine

    一个带有建议.技巧和最佳实践的全面指导和易懂易学的结构. 掌握Redmine 版权©2013 Packt出版 前言(略) 1.熟悉Redmin 我们尝试去做一个新的网站应用程序的时候,回去询问一些了解 ...

  10. Git 分支

    Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,某一次的提交指向这处时刻的文件快照,看起来就像每次提交都保存了当时的文件,连续的提交形成一条长链 分支 指向某一个特定的提交,不同的 ...