[转载]UCenter 与 Asp.net 通讯

[转载]UCenter 与 Asp.net 通讯 – Dozer .NET 技术博客 – 博客园.

UCenter 与 Asp.net 通讯

前言

学生在线下面有多个子站,其中包括一个Discuz论坛

那当然要充分利用强大的UCenter来实现多点登陆

UCenter和别的网站跨域通讯,那用的肯定是WebService

PHP官方封装好了,所以很容易就搞定了,但是.Net…

网上找不到任何核心的通讯手册,除非去扣那个PHP的开发手册

Google后:

UCenter 接口开发手册:这个就是官方封装过的版本,其实这个根本不能叫接口开发手册,里面介绍的都是已经封装过的PHP函数,对核心只字不提

一个项目文件:刚看到这个我很兴奋,但是按照它说的调整好后,却不能用!一开始还不懂为什么,懂得原理后才知道,它其实是个空壳

一个DLL文件:这个DLL很强大,可惜,没有例程、没有手册、没有注释,还有BUG…

但是相对来说,最后的那个DLL是最接近的,所以决定反编译之,开始研究

最后就有了Dozer编辑版~ 成功实现通讯!

来源:dozer.cnblogs.com 作者:Dozer

UCenter通讯原理

原理网上很多,我也只是知道一个皮毛,在这里就以同步登陆为例子,来讲解一下这个类库的用法

login

以上就是同步登陆的步骤,如果你已经配置好,那么只需要这3行代码

01 namespace WebApplication1
02 {
03 public partial class Default : System.Web.UI.Page
04 {
05 protected void Page_Load(object sender, EventArgs e)
06 {
07 var uc = new UCClient();
08 var user = uc.UC_User_Login("user", "password").User;
09 Response.Write(uc.UC_User_Synlogin(user.Uid));
10 }
11 }
12 }

总之,在你的网站程序中需要有2个部分

一个是UCAPI部分,需要给UCenter调用

另外一部分就是UClient部分,用于调用UCenter

这样才能在最后实现双向通讯

来源:dozer.cnblogs.com 作者:Dozer

UCenter端配置过程

按照惯例,登陆UCenter后台,然后添加应用程序

别的地方和PHP网站一样,只有一个地方,就是“应用接口文件名称”的地方

需要填写uc.ashx

这个和此类库的原理有关,后面详解

1

提交…可惜,显示通讯不成功,因为我的网站还没配置呢~

提交后再次编辑,会得到一段PHP的配置信息

01 define('UC_CONNECT', 'mySQL');
02 define('UC_DBHOST', localhost');
03 define('UC_DBUSER', 'root');
04 define('UC_DBPW', 'mySQL');
05 define('UC_DBNAME', 'uc_discuz');
06 define('UC_DBCHARSET', 'utf8');
07 define('UC_DBTABLEPRE', '`uc_discuz`.uc_');
08 define('UC_DBCONNECT', '0');
09 define('UC_KEY', 'qwertyui');
10 define('UC_API', 'http://localhost/ucenter');
11 define('UC_CHARSET', 'utf-8');
12 define('UC_IP', '127.0.0.1');
13 define('UC_APPID', '19');
14 define('UC_PPP', '20');

先留着,后面会用到~

来源:dozer.cnblogs.com 作者:Dozer

WebApplication端配置过程

第一步当然是Web.config文件

新建一个网站应用程序,并且引用这个类库

上面的配置信息是PHP用的,我们把它转换到Web.config文件中去

01 <appSettings>
02 <add key="UC_CONNECT" value="mysql"/>
03 <add key="UC_DBHOST" value="localhost"/>
04 <add key="UC_DBUSER" value="root"/>
05 <add key="UC_DBPW" value="mysql"/>
06 <add key="UC_DBNAME" value="uc_discuz"/>
07 <add key="UC_DBCHARSET" value="utf8"/>
08 <add key="UC_APPIDUC_DBTABLEPRE" value="`uc_discuz`.uc_"/>
09 <add key="UC_DBCONNECT" value="0"/>
10 <add key="UC_KEY" value="qwertyui"/>
11 <add key="UC_API" value="http://localhost/ucenter"/>
12 <add key="UC_CHARSET" value="utf-8"/>
13 <add key="UC_IP" value="127.0.0.1"/>
14 <add key="UC_APPID" value="19"/>
15 <add key="UC_PPP" value="20"/>
16 </appSettings>

来源:dozer.cnblogs.com 作者:Dozer

第二步是建立UCAPI,供UCenter调用(这步完成后UCenter中会显示通讯正常)

1、新建一个叫API的文件

2、在里面建立一个新文件uc.ashx(不要建立.aspx)

3、打开这个uc.ashx文件,本来它继承于IHttpHandler,我们把它修改一下,让它继承于FS.API.UCenter.UCAPI.UCAPIBase

4、实现一下这个抽象类的函数(利用VS的代码自动完成功能)

5、接下来你就可以在这里写一些逻辑代码了

比如,当有人在别的站同步登陆后,会通知你的站点

然后会调用 Synlogin 函数,这时候,你就需要在这个函数里写一些代码

例如:写cookie之类的

Q:UCenter为什么不直接写Cookie,子站读Cookie?

A:UCenter实现的是跨域登陆,所以每个子站的Cookie是分开的,需要自己实现!

好了,完成这步后打开UCenter,你会发现:通讯成功!

UCenter测试通讯成功仅仅是调用了一个test函数,只要上述配置没写错,那就会显示通讯成功!但是它还不能实现任何功能,需要把上面的那些函数完善~

来源:dozer.cnblogs.com 作者:Dozer

第三步是在网站中调用UCenter的接口了

这个超级简单,其实“UCenter通讯原理”那部分代码

为什么要Respon.Write这段东西?

这和UCenter同步登陆原理有关,向UCenter传递信息,告诉它要同步登陆后,它不会自己通知别的子站,而是返回一段JS,需要你的网站调用这段JS,然后通知各个子站

OK了~所有配置完成~

来源:dozer.cnblogs.com 作者:Dozer

我对原来的那个DLL做了什么?

1、原来的DLL编码部分有几个严重的问题,导致编码错误,无法提交表单

2、原来的DLL估计是很久以前写的,里面序列化和反序列化的时候,规则和现在UCenter的规则不同,我根据现在的规则,修改了一下

3、修复别的一些小BUG

来源:dozer.cnblogs.com 作者:Dozer

类库下载&示例代码

代码的原始作者找不到了,遵循开源精神

另外不保证目前代码全部正确,我只是测试了几个函数

直接公布源代码:源代码

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏