在写这篇文章的时候,我还在想,这篇文章也许能给你带来一些收获,但或许会令你更加的迷茫,为什么会这样?
因为:
1、UCenter虽然足够强大,但正为它的强大,它的不少暗箱操作使得我们望而生畏,我们不害怕出错,我们害怕出错时抓不到出错点。
2、同步登录经常会跨平台,跨服务器,跨域,跨数据库等。环境要求比较高,这使得我们需要更多地了解它。
最近公司弄了个团购项目,要求团购的用户和论坛的会员同步起来,以期实现优质会员享受更低折扣等功能。这个项目正是以asp.net开发,当然,在这里要非常感谢同步API的原作者dozer,其原理在其主页文章http://www.dozer.cc/2011/01/ucenter-api-in-depth-1st/
有详细介绍,我这里只简单介绍一下:
UCenter是所有子项目的核心,任何其中某一子应用(包括Discuz论坛)通过向它发送登录,注册,删除,退出等消息,再由UCenter转发到其它的子应用。
,另外我只介绍一下需要重点步骤及需要注意的地方。
第一步,你要得到和UCenter进行通信的类库,作者的主页有原始类库http://www.dozer.cc/2011/05/ucenter-api-for-net-on-codeplex/,是asp.net 4.0版的。我的环境是3.5所以将类库作了一些修改,修改之后的版本在这里/Files/CoreCaiNiao/DS.Web.UCenter.rar。
第二步,你在你的asp.net项目中引用该类库,引用类库的时候,Browse到dll就行,没有必要把整个项目原代码添加到你的解决方案中。
这个类库有两个重点的文件夹需要注意:DS.Web.UCenter.Api与DS.Web.UCenter.Client,
其中DS.Web.UCenter.Api用于响应由UCenter中心发出的通知消息;
然后DS.Web.UCenter.Client用于本地向UCenter发送消息;
第三步,你的asp.net项目需要一个专门向MySql数据库提供操作的类,为了使用本类,还需要安装mysql-connector-net-6.4.3.msi,这个文件可以到官网去下载(上谷歌搜一下),之后,建立用于连接MySql的类。
有人要问和MySql数据库通信的必要性,我得解释一下,UCenter向你的应用发出的通知里,只有UID,要想得到更多的用户信息,唯有和MySql通信。
我这里有一个临时写的,如果你不介意,可以拿去用,代码如下:
不过我要提醒一下,为了安全,在主服务器开放MySql对外的帐户权限的时候,仅需要开放select权限就可以了。
第四步,你需要一个响应通知的页面了,这里为了尊重原作者,我在WEB根目录下建立了API文件夹,并在里面建立了一个名为uc.ashx的响应文件。这个页面用于响应UCenter的同步通知。
文件内容如下:
我的示例代码中,只对同步登录和退出消息作出响应,具体过程中,您可以根据需要作更多的响应.
第五步,这步是写配置信息,因为原始类库的配置信息都写到它自己的App.config中去了,我们需要复制过来到Web.config
在
这里有三行要改:
倒数第1行:应用ID:UC_APPID
倒数第4行:UCenter地址:UC_API
倒数第5行:通信密钥:UC_KEY
另外,再加上MySqlProviderFactories节
第六步,检查本地服务器和UCenter服务器是否能正常通信(两台服务器互相telnet IP地址 80)
第七步,去UCenter添加此应用,具体怎么填的图片如下:
最后,我祈祷你能通信成功并同步成功。建议先在本地进行DEBUG模式,在uc.ashx文件的SynLogin(int uid)方法及UpdateApps(UcApps apps)处下断点,这样可以查看是否有通知过来,之后再确定问题的根源。
我成功的图片:
最新提醒:
有不少读者反映为什么引用我的UC.ashx后不能直接被编译?这是因为你直接把我的业务逻辑代码也照搬了,实际上
public override ApiReturn SynLogin(int uid)
这个函数是用来做你自己的业务处理的,做完处理后,返回给接口一个成功的信号就行了,形式如同这样:
其中,灰色的部分千万别抄,只是示意代码,绿色的部分是必须要的,作用是向接口表明你已经成功处理登录业务啦。
出处:http://www.cnblogs.com/CoreCaiNiao/archive/2011/08/25/2153434.html