此文已淘汰,最新版在:
目錄:
- 開篇
- 通訊原理:UCenter API 與子站之間的通訊原理和單點登陸原理
- 加密與解密:AuthCode詳解 & AuthCode函數翻譯過程中的注意點
- 網站搭建: 康盛旗下網站 & Asp.net 網站搭建
前言
學生線上下面有多個子站,其中包括一個Discuz論壇
那當然要充分利用強大的UCenter來實現多點登陸
UCenter和別的網站跨域通訊,那用的肯定是WebService
PHP官方封裝好了,所以很容易就搞定了,但是.Net…
網上找不到任何核心的通訊手冊,除非去扣那個PHP的開發手冊
Google後:
UCenter 介面開發手冊:這個就是官方封裝過的版本,其實這個根本不能叫介面開發手冊,裡面介紹的都是已經封裝過的PHP函數,對核心隻字不提
一個專案檔:剛看到這個我很興奮,但是按照它說的調整好後,卻不能用!一開始還不懂為什麼,懂得原理後才知道,它其實是個空殼
一個DLL檔案:這個DLL很強大,可惜,沒有常式、沒有手冊、沒有注釋,還有BUG…
但是相對來說,最後的那個DLL是最接近的,所以決定反編譯之,開始研究
最後就有了Dozer編輯版~ 成功實現通訊!
來源:dozer.cnblogs.com 作者:Dozer
UCenter通訊原理
原理網上很多,我也只是知道一個皮毛,在這裡就以同步登陸為例子,來講解一下這個類庫的用法
以上就是同步登陸的步驟,如果你已經配置好,那麼只需要這3行代碼
namespace WebApplication1{ public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { var uc = new UCClient(); var user = uc.UC_User_Login("user", "password").User; Response.Write(uc.UC_User_Synlogin(user.Uid)); } }}
總之,在你的網站程式中需要有2個部分
一個是UCAPI部分,需要給UCenter調用
另外一部分就是UClient部分,用於調用UCenter
這樣才能在最後實現雙向通訊
來源:dozer.cnblogs.com 作者:Dozer
UCenter端配置過程
按照慣例,登陸UCenter後台,然後添加應用程式
別的地方和PHP網站一樣,只有一個地方,就是“應用介面檔案名稱”的地方
需要填寫uc.ashx
這個和此類庫的原理有關,後面詳解
提交…可惜,顯示通訊不成功,因為我的網站還沒配置呢~
提交後再次編輯,會得到一段PHP的配置資訊
define('UC_CONNECT', 'mysql');define('UC_DBHOST', localhost');define('UC_DBUSER', 'root');define('UC_DBPW', 'mysql');define('UC_DBNAME', 'uc_discuz');define('UC_DBCHARSET', 'utf8');define('UC_DBTABLEPRE', '`uc_discuz`.uc_');define('UC_DBCONNECT', '0');define('UC_KEY', 'qwertyui');define('UC_API', 'http://localhost/ucenter');define('UC_CHARSET', 'utf-8');define('UC_IP', '127.0.0.1');define('UC_APPID', '19');define('UC_PPP', '20');
先留著,後面會用到~
來源:dozer.cnblogs.com 作者:Dozer
WebApplication端配置過程
第一步當然是Web.config檔案
建立一個網站應用程式程式,並且引用這個類庫
上面的配置資訊是PHP用的,我們把它轉換到Web.config檔案中去
<appSettings><add key="UC_CONNECT" value="mysql"/><add key="UC_DBHOST" value="localhost"/><add key="UC_DBUSER" value="root"/><add key="UC_DBPW" value="mysql"/><add key="UC_DBNAME" value="uc_discuz"/><add key="UC_DBCHARSET" value="utf8"/><add key="UC_APPIDUC_DBTABLEPRE" value="`uc_discuz`.uc_"/><add key="UC_DBCONNECT" value="0"/><add key="UC_KEY" value="qwertyui"/><add key="UC_API" value="http://localhost/ucenter"/><add key="UC_CHARSET" value="utf-8"/><add key="UC_IP" value="127.0.0.1"/><add key="UC_APPID" value="19"/><add key="UC_PPP" value="20"/></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
類庫下載&範例程式碼
代碼的原始作者找不到了,遵循開源精神
另外不保證目前代碼全部正確,我只是測試了幾個函數
類庫原始碼:下載
範例程式碼:下載
來源:dozer.cnblogs.com 作者:Dozer