UCenter 與 Asp.net 通訊

來源:互聯網
上載者:User
此文已淘汰,最新版在:

目錄:

  1. 開篇
  2. 通訊原理:UCenter API 與子站之間的通訊原理和單點登陸原理
  3. 加密與解密:AuthCode詳解 & AuthCode函數翻譯過程中的注意點
  4. 網站搭建: 康盛旗下網站 & 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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.