Theosoft.Blog

Goddess Light My Path!

对微软的Windows Phone 7稍微有些了解的人都知道,这个平台的移动客户端都是用C#语言写的。C#这门语言不仅简单易学,最大的好处是用它写出来的程序可以被轻易的反编译,非常适合同行间的技术交流:)  Sina微博是目前手机上一个非常热门的应用。Sina微博还提供oauth认证和各种API来让第三方认证使用。本文将以“从Sina微博客户端里提取appKey和appSecret”为例,介绍如何从wp7客户端里发现他们的“秘密”!(如果你不知道appKey和appSecret是神马,可以先去Sina微博开放平台看看)

第一步,当然是下载客户端啦。不是用你的手机下载啊!当然是要下载到电脑上。打开Phone7Market,搜索关键字“微博”,第一个就是。

下载

查看全文 »

, , , , , 浏览:24次

RSA是一种比较常用的非对称加密算法,其原理是基于大整数因数分解的计算安全,这里不做介绍。非对称加密的好处在于其密码分为公钥和私钥两部分,你可以随意分发你的公钥,让用户用来加密数据;等上传到服务器端后再用私钥就可以解密里面的数据。所以,这样的体系特别适合用于客户端–尤其使手机客户端的数据加密,而不用担心你的程序被反编译、破解后泄露了你的密码。

正是因为有着这么好的安全特性,早在年初,我还在使用windows mobile手机的时候,就把RSA算法写入了我的那个利用飞信发短信的客户端里。每当要发送短信时,客户端负责使用公钥将短信内容加密,并连同收件人一起传输到接收数据的服务器上。服务器收到信息后直接存储到数据库里。然后由另一台专门负责短信发送的服务器,每隔1分钟查询一次数据库,发现有需要发送的短信后,用私钥将其解密,并通过飞信发送出去。无论是否发送成功,最终都会再发送一条短信,向我报告本次发送的结果。

查看全文 »

, , , , , 浏览:532次

真的好久好久没有认认真真地写Blog了,每一次的借口都是太忙了,咳……

先来汇报一下这段日子到底在忙些什么。最近忽然对飞信这个东东特别的感兴趣,因为可以免费发短信嘛。从网找来了一个php版的飞信客户端,发布到了自己的网站上。简单的看过源码,主要是模仿电脑版的飞信和飞信的服务器做交互。然后做了个支持短信群发的简单的支持get方式递交数据的接口。但是很快就发现这样在发送含中文的短信时会变成乱码,除非事先对短信的内容进行UrlEncode,显然这样子调用很麻烦,所以就把那个php的接口封装倒了我的Webservice里,取名SendSMS(string user,string psw,string phonelist,string msg);

sendsms1

sendsms

查看全文 »

, , , 浏览:640次

        最近服务器不太稳定,因为我的Blog正准备做一次大搬家。以后一段时间内,我的Blog会有www.theosoft.net和www.theosoft.cn两个版本并存的可能。但是WebService服务还是一定要搬家的,原来的空间服务商是有流量限制的,流量满了以后我的网站就被关掉了。为了必影响我Blog的正常访问,以后大家引用我的webservice项目时,全部重新使用这个地址:http://www.theosoft.cn/webservice/theoservice.asmx。原来的文章里的地址我已经修改过了,大家看到以后就经快修改一下吧。

, , , , 浏览:585次

        好长的名字啊!自己看得都觉得累了……废话到此为止,开始正文:

     我们在写asp.net网页的时候,会用到很多需要数据绑定的控件。Asp.net提供了数据绑定这一特性,确实方便了很多。但是这样的绑定都是在服务器端完成的,而我们有时会希望根据用户的选择来动态的更新其它一些控件的数据内容。例如用两个DropDownList来让用户选择所在的城市,一个绑定“省”一级的数据,如“浙江”、“吉林”等,另一个绑定用户选择的“省”下面的城市。要实现这样一个动态的数据绑定其实不难,可以把前一个DropDownListautopostback属性设成true,然后在事件里绑定后一个DropDownList的数据就可以了。这样虽然是可以实现动态数据绑定,但是用户每选一个选项,网页就不得不刷新一次,内容一多,就很浪费时间。那有没有不刷新页面但又能动态绑定数据的方法呢?当然有!方法就是用现在十分流行的Ajax技术。

     Ajax的应用十分广泛,这里仅仅介绍利用JQuery来实现异步数据更新的方法。jQuery 是一个JavaScript 库,它有助于简化 JavaScript 以及 Asynchronous JavaScript + XML (Ajax) 编程。在JQuery中有一个Ajax的调用方法:

$.ajax({

type: "POST",

url: window.location.protocol + "//" + window.location.host + “a.aspx”,

data: postdata,

complete: function(msg){

ShowResult(msg.responseText);

} ,

dataType : "html"

});

     这里的url是目标页面,通常我们会专门处理这些Ajax请求,单独写一个页面,这里假定为ajax.aspxdata是你要post给目标页面的数据,例如“do=getcity&province=100”。Complete里的那个functionShowResult(msg.responseText);是用来处理Ajax的返回结果的,结果会以html的形式保存在参数msg.responseText里。

        了解了这个Ajax的调用方法,我们来说说到底怎样实现数据的动态绑定。还是以刚才说的“选择城市”作为例子。首先在你要显示的页面(例如Selectcity.aspx)有一个空的DropDownList(这个是用来选择“城市”的,不是那个选择“省份”的),在其外面包一个<div>标签,idcity。这个是假的,只是在那里占个位子,真正的数据并不会绑定到这个控件上。然后我们在Ajax页面ajax.aspx里也放一个一模一样的DropDownList。然后我们绑定选择“省份”的那个DropDownListonchange事件(以下所说的事件,都是javascript事件,而非asp.net事件),让其调用我们的ajax方法。然后,ajax会把用户选择的“省份”放在postdata里(如“do=getcity&province=100”)传到Ajax.aspx页面,页面获得这个参数后,为ajax.aspx上的DropDownList绑定数据。结果以html的形式保存到msg.responseText里。

      接下来要怎么做也许你已经想到了,对了,我们要用的就是“狸猫换太子”的手段。前面调用ajax方法的时候,不是还有一个ShowResult的方法吗?那个方法在获得了我们ajax页面的返回结果。我们知道,DropDownList最终生成的<select>空间,所以我们把返回结果里从“<select>”到“</select>”之间的部分提取出来,替换到那个id=citydivinnerHTML里,覆盖原来占位的那个DropDownList。于是,我们的动态数据绑定就完成了。

        不知道你听明白了没有,下面给出文中提到的各个文件的源码,如果你没有看明白,就自己捉摸捉摸吧^_^

Ajax.js

function GetCity(provinceID)

{

    $.ajax({

              type: "POST",

              url: window.location.protocol + "//" + window.location.host + "/Ajax.aspx",

              data:   "do=GetCity&ProvinceID=" + provinceID,

              complete: function(msg){

                                ShowCity(msg.responseText);

                       } ,

              dataType : "html"

             });   

}

function ShowCity(strCode)

{

    var obj = document.getElementByid("City");

    var start = strCode.indexOf("<select");

    var end = strCode.indexOf("</select>") + 9;

    var strHtml = strCode.substring(start,end);

        

    if (obj!=null)

    {       

        obj.innerHTML = strHtml;                         

    }

}

Selectcity.aspx

<%@ Page language="c#" Codebehind="Selectcity.aspx.cs" AutoEventWireup="false" Inherits="Selectcity" %>

<html>

  <head>

                   <title>Selectcity</title>

    <script language="JavaScript" src="/Ajax.js" type="text/javascript"></script>

    <script language="JavaScript" src="/jQuery.js" type="text/javascript"></script>

  </head>

         <body topmargin="0" marginwidth="0" marginheight="0">

                   <form id="Form1" method="post" runat="server">

                            <asp:DropDownList ID="province" runat="server"></asp:DropDownList>

                            <div id="city">

                                     <asp:DropDownList ID="oldcity" runat="server"></asp:DropDownList>

                            </div>

                   </form>

         </body>

</html>

Selectcity.aspx.cs

这个就不给了,随便给那个ID= provinceDropDownList绑定点数据即可。

ajax.aspx

<%@ Page language="c#" Codebehind="Ajax.aspx.cs" AutoEventWireup="false" Inherits="Selectcity" %>

<html>

  <head>

                   <title>Selectcity</title>

    <script language="JavaScript" src="/Ajax.js" type="text/javascript"></script>

    <script language="JavaScript" src="/jQuery.js" type="text/javascript"></script>

  </head>

         <body topmargin="0" marginwidth="0" marginheight="0">

                   <form id="Form1" method="post" runat="server">

                            <asp:DropDownList ID="city" runat="server"></asp:DropDownList>

                   </form>

         </body>

</html>

Ajax.aspx.cs只列出关键代码,其它的省略

protected void Page_Load(object sender, EventArgs e)

{

    string strAction = Request.Form["do"] + String.Empty;

    switch (strAction)

    {

        case "GetCity":

            GetCity();

            break;

    }

}

protected void GetCity()

{

    string strProvinceID = Request.Form["ProvinceID"] ?? String.Empty;

    if (!String.IsNullOrEmpty(strProvinceID))

    {

        List<City> CityList = /*你要绑定的数据*/;

        this.City.DataTextField = "CityName";    //这里的city就是前面aspxDropDownList

        this.City.DataValueField = "CityID";

        this.City.DataSource = CityList;

        this.City.DataBind();

    }

}

, , , 浏览:487次