在程序的设计中遇到一些问题,晚上查资料很久都没有解决,希望大家能够帮我看一下。

 

我首先为站点A的所有页面写了一个基类BasePage.cs

 

public  class PageBase:System.Web.UI.Page
{
    
protected override void OnInit(EventArgs e)
        {
             
//我在这里判断了用户是否登录
            Bool islogin;
            If(islogin)
            {
            }
            Else
            {
               Response.redirect(AAA);
             }
        }
}

 

 

 

 

因为现在想在A站点中使用JQueryAjax调用webservice进行一些数据的互操作,咨询您之后决定采用context.user.identity 来传递是否登录和登录用户的Userid的信息,于是我就构建了PageIdentity.csPagePrincipal.cs,由于前面已经判断了用户是否登录,所以我选择在这里直接默认为登录的状态:

 

PageIdentity.cs

class PageIdentity:System.Security.Principal.IIdentity
    {
        
private string userid = "-1";
        
private bool isauthenticated = false;
        
public PageIdentity(string m_userid, string m_userpass)
        {
            userid 
= m_userid;
            isauthenticated 
= true;
        }
        
#region IIdentity 成员
        
public string AuthenticationType
        {
            
get { return null; }
        }
        
public bool IsAuthenticated
        {
            
get { return isauthenticated; }
        }
        
public string Name
        {
            
get { return userid; }
        }
        
#endregion
}

 

 

 

PagePrincipal.cs

class PagePrincipal:System.Security.Principal.IPrincipal
    {
        
private System.Security.Principal.IIdentity identity;
        
private bool isinrole = false;
        
public PagePrincipal(string userid, string userpass)
        {
            identity 
= new PageIdentity(userid, userpass);
            
if (identity.IsAuthenticated)
            {
                isinrole 
= true;
            }
        }
        
#region IPrincipal 成员
        
public System.Security.Principal.IIdentity Identity
        {
            
get { return identity; }
        }
        
public bool IsInRole(string role)
        {
            
return isinrole;
        }
        
#endregion
    }

 

 

 

然后修改了BasePage.cs来设置A站点页面的Context.User.

public  class PageBase:System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
        {
             
//我在这里判断了用户是否登录
            Bool islogin;
            If(islogin)
            {
                    
PagePrincipal pageuser = new PagePrincipal(userid, "null");
                    Context.User = pageuser;
                    System.Web.Security.FormsAuthentication.SetAuthCookie(UserID, true,System.Web.Security.FormsAuthentication.FormsCookiePath);
}
Else
{
    Response.redirect(AAA);
}
        }
}

 

 

 

 

在站点A中我使用this.Title = HttpContext.Current.User.Identity.Name;可以取到Name的值,

但是在WebService中,HttpContext.Current.User.Identity.Name的值却是空值,而且Context.User.Identity.IsAuthenticated也是false值。

以下是我的WebService的代码:

[System.Web.Script.Services.ScriptService]
    
public class Service : System.Web.Services.WebService
    {
 
        [WebMethod]
        
public string GetLoginUserID()
        {
            
string uid = "-1";
            
if (Context.User.Identity!=null)
            {
                
if (!string.IsNullOrEmpty(Context.User.Identity.Name))
                {
                    uid 
= Context.User.Identity.Name;
                }
              
            }
            
return uid;
        }
}

但是这里一直取不到 Context.User.Identity.Name的值,并且通过调试发现Context.User.Identity.IsAuthenticated也是false的值,不知道为什么。

 

该问题一直没有解决,希望大家能够帮我看一下是哪里存在问题,不胜感激。

 

附件是相应的程序代码:

/Files/yangrui/project.rar

posted @ 2010-05-10 01:10 杨睿YoungRay 阅读(1028) 评论(1) 编辑
2009年9月的时候,discuz 推出了3.0版本的discuz nt,虽然与之前的提供SNS社区的目标相比缩水了不少,但是还是令人期待的,官方的说法是修改了大量的bug,先发布一个稳定的版本,为后面的其它发展打下基础。

           Discuz NT已经集成了Memcached来做缓存,代震军 在他的博客里面对原理和思路也做了很多的阐述:

           Discuz!NT 缓存设计简析 [原创]

           Discuz!NT中集成Memcached分布式缓存

          一、安装Memcached及Memcached配置和状态查询

          要想使用Memcached做缓存首先需要安装Memcached服务,安装方法如下:

      1. 下载Memcached:http://code.jellycan.com/memcached/ 现在的最新版本是1.2.6.注意下载正确的版本,windows 服务的话下载win32 binary。

      2.解压之后放在硬盘的目录下,如:D:\memcached. 然后在运行中输入cmd进入命令行,进入到Memcached.exe 所在的目录,例如:D:\memcached,然后输入:Memcached –d install,即可完成安装。

          Memcached还有其他的一些常用的命令如下:

      -p 监听的端口
      -l 连接的IP地址, 默认是本机
      -d start 启动memcached服务
      -d restart 重起memcached服务
      -d stop|shutdown 关闭正在运行的memcached服务
      -d install 安装memcached服务
      -d uninstall 卸载memcached服务
      -u 以的身份运行 (仅在以root运行的时候有效)
      -m 最大内存使用,单位MB。默认64MB
      -M 内存耗尽时返回错误,而不是删除项
      -c 最大同时连接数,默认是1024
      -f 块大小增长因子,默认是1.25
      -n 最小分配空间,key+value+flags默认是48
      -h 显示帮助

          按照上面的安装步骤安装之后,使用memcached –m 200来调整最大内存占用之后会发现没有起作用,总是默认的64MB的内存,在网上搜了一下,原因是注册表中并没有写入信息,可以这样来修改。

         1. memcached –d shutdown 首先关闭memcached服务。

         2.进入注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server, 在其中有一个ImagePath项,值为"d:\memcached\memcached.exe" -d runservice,在后面加上-l 127.0.0.1 -m 3000 -c 2048。

        3.memcached –d start 启动memcached服务,这样就将memcached的最大内存修改为了3000MB。

        对Memcached缓存服务的状态查询,可以先telnet连接上服务:telnet 127.0.0.1 11211 ,然后使用 stats命令查看缓存服务的状态,会返回如下的数据:   

        time:    1255537291                               服务器当前的unix时间戳
        total_items:    54                                     从服务器启动以后存储的items总数量
        connection_structures:    19                    服务器分配的连接构造数
        version:    1.2.6                                        memcache版本
        limit_maxbytes:    67108864                    分配给memcache的内存大小(字节)
        cmd_get:    1645                                      get命令(获取)总请求次数
        evictions:    0                                            为获取空闲内存而删除的items数(分配给memcache的空间用满后需
                                                                         要删除旧的items来得到空间分配给新的items)
        total_connections:    19                           从服务器启动以后曾经打开过的连接数
        bytes:    248723                                      当前服务器存储items占用的字节数
        threads:    1                                             当前线程数
        get_misses:    82                                      总未命中次数
        pointer_size:    32                                    当前操作系统的指针大小(32位系统一般是32bit)
        bytes_read:    490982                              总读取字节数(请求字节数)
        uptime:    161                                           服务器已经运行的秒数
        curr_connections:    18                             当前打开着的连接数
        pid:    2816                                               memcache服务器的进程ID
        bytes_written:    16517259                     总发送字节数(结果字节数)
        get_hits:    1563                                      总命中次数
        cmd_set:    54                                          set命令(保存)总请求次数
        curr_items:    28                                       服务器当前存储的items数量

      二、在Discuz NT 3.0中配置Memcached服务

        在Discuz NT 3.0中配置Memcached服务较为简单,找到论坛根目录下的config目录,找到Memcached.config,打开,进行如下配置:

<?xml version="1.0"?>
<MemCachedConfigInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance%22 xmlns:xsd="http://www.w3.org/2001/XMLSchema%22>
    <ApplyMemCached>(1)</ApplyMemCached>
    <ServerList>(2)</ServerList>
    <PoolName>DiscuzNT_MemCache</PoolName>
    <IntConnections>3</IntConnections>
    <MinConnections>3</MinConnections>
    <MaxConnections>5</MaxConnections>
    <SocketConnectTimeout>1000</SocketConnectTimeout>
    <SocketTimeout>3000</SocketTimeout>
    <MaintenanceSleep>30</MaintenanceSleep>
    <FailOver>true</FailOver>
    <Nagle>true</Nagle>
</MemCachedConfigInfo>

      (1)处为"true”的时候表示Discuz NT打开Memcached缓存功能,为"false”的时候表示关闭Memcached缓存功能。

      (2)处填写Memcached服务器的IP地址+端口,例如:127.0.0.1:11211

   三、二次开发监控Memcached状态

       Discuz NT的一个好处就是开源的,并且我们能够再上面很灵活的进行二次开发,这里,我们就以监控Memcached状态为例来做一个二次开发。具体的步骤是:

      1.下载Memcached的.Net的开发包,下载地址是:http://sourceforge.net/projects/memcacheddotnet/

      2.在visual studio 2005或者2008中建立一个类库,例如命名为:MyBBS.BBS.Plugin.MemcachedStats,然后在项目点击右键,选择属性,将默认命名空间修改为:Discuz.Web,如图:

      1

    3.将Memcached的.Net开发包解压,将将Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll 等放到bin目录,并且在项目中引用Memcached.ClientLibrary.dll.

    4.在项目中引用Discuz.Forum.

    5.在项目中增加类,命名为memcachedstats.cs.记得最好是小写,继承自Discuz.Forum.PageBase。然后在类中override showpage()函数,我们就可以在这里来写代码了,如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Collections;
using M=Memcached.ClientLibrary;

namespace Discuz.Web
{
    public class memcachedstats:Discuz.Forum.PageBase
    {
        public string MemcachedStatsOutput = string.Empty;
        protected override void ShowPage()
        {
            base.ShowPage();
            string[] servers = { "此处填写Memcachedf服务IP+端口" };
            M.SockIOPool pool = M.SockIOPool.GetInstance();
            pool.SetServers(servers);
            pool.InitConnections = 3;
            pool.MinConnections = 3;
            pool.MaxConnections = 5;

            pool.SocketConnectTimeout = 1000;
            pool.SocketTimeout = 3000;

            pool.MaintenanceSleep = 30;
            pool.Failover = true;

            pool.Nagle = false;
            pool.Initialize();
            this.pagetitle = "MemcachedStats";
            M.MemcachedClient mc = new Memcached.ClientLibrary.MemcachedClient();
            StringBuilder sb = new StringBuilder();
            Hashtable ht = mc.Stats();
            sb.AppendLine("Memcached Stats:<br>");
            sb.AppendLine("_______________________________________<br>");
            foreach (DictionaryEntry de in ht)
            {
                Hashtable info = (Hashtable)de.Value;
                foreach (DictionaryEntry de2 in info)
                {
                    sb.AppendLine(de2.Key.ToString() + ":&nbsp;&nbsp;&nbsp;&nbsp;" + de2.Value.ToString() + "<br>");
                }
            }
            MemcachedStatsOutput = sb.ToString();
        }
    }
}

    这样我们就将代码完成了,我们将Memcached服务的状态信息保存到了MemcachedStatsOutput 这个字段中了,那么我们怎么在页面上显示出来呢?在进行下一步之前,编译输出MyBBS.BBS.Plugin.MemcachedStats.dll然后上传到论坛根目录的bin目录下。

    6.在论坛根目录下面的templete\default\中新建memcachedstats.htm,写入下面的代码:

<%template _header%>
<div id="nav">
    <div class="wrap s_clear">
    <a href="{config.forumurl}" class="title">{config.forumtitle}</a> &raquo; <strong>Memcached Stats</strong>
    </div>
</div>
<div class="wrap with_side s_clear help" id="wrap">
   <div class="side">
        <div class="sideinner">
        </div>
        </div>
        <div class="cpmain">
        <div class="cpcontent">
            <h3 class="lightlink">Memcached Stats</h3>
            <hr class="solidline"/>
            {MemcachedStatsOutput}
        </div>
        </div>
</div>
<%template _copyright%>
<%template _footer%>

     这里我们重点注意红色的部分,我们就是在这里来把我们上面的类库里面的MemcachedStatsOutput字段在这里输出的。

     7.进入论坛后台管理系统,点击“界面风格”——“模板管理”——“default”,这时我们就可以看到出现了memcachedstats这个模板了,勾中前面的复选框,然后选择“按选择的模板文件生成页面”。

     8.上面的工作完成之后,我们在浏览器中输入:您的论坛地址\memcachedstats.aspx,就可以看到统计的Memcached服务的信息了,如图:

   2

四、结束语与参考信息

      怎么样,还是很简单的吧,当然这里仅仅是做了最基本的开发了,不过相信这些弄清楚了,其它的开发就不是很复杂了,大家也都可以开发出自己更多丰富多彩的功能了。

     下面列出的是其他的一些参考资料,希望对大家有帮助:

     Discuz NT 界面模板的基本语法:http://nt.discuz.net/doc/default.aspx?cid=42

     Memcached的安装:http://www.cnblogs.com/zjneter/archive/2007/07/19/822780.html

     网友编写的用php代码展示Memcached状态的代码:http://code.sixapart.com/svn/memcached/trunk/server/scripts/memcached-tool

posted @ 2009-10-17 01:09 杨睿YoungRay 阅读(2129) 评论(5) 编辑

    本书是TXTBOOK书友会http://www.txtbook.com.cn/ 为您推荐的当前最热最新的40本书,我们的理念是:帮助读者找到有价值的图书,分享,阅读,交流。
    本书是TXTBOOK《好书快报》的第一期,也是创刊号,在这一期里,有来自网友对TXTBOOK书友会两周年的祝贺,还有好看的书籍,下面是推荐的部分书籍列表:
(1)追风筝的人
(2)会有天使替我爱你
(3)别在天亮之前离开我
(4)人生若如再见
(5)我是你儿子
(6)小时代
(7)法老的宠妃
(8)恶魔法则
(9)寻找前世之旅
(10)一寸河山一寸血
(11)挂职
(12)巴别塔之犬
(13)大便书
(14)阿里巴巴神话
(15)激荡三十年

 

 

下载地址:http://wwwftp.txtbook.com.cn/mag/mag200801.rar

欢迎您提出宝贵的意见和建议。

 
posted @ 2008-10-26 23:55 杨睿YoungRay 阅读(596) 评论(0) 编辑

本文为原创,版权所有,如需转载,请注明

搜狐

 

    可以说,搜狐是所有门户网站中表现最为突出的一个,由于奥运会官方赞助商的特殊地位,使得其新闻和播报速度较其它的门户网站有了较大的优势。

搜狐今年为奥运所进行的改版也是非常成功的,记得去年的时候我还是经常上网首先打开新浪看新闻,然后再去搜狐逛逛,但是自从搜狐改版之后,觉得搜狐无论是页面排版还是打开速度都比以前有了非常大的提高。所以现在变成了上网首先上搜狐。

搜狐对本次的奥运报道相当重视,首页拿出了非常大的版面来对奥运信息进行报道。而且首页的工具条非常清晰的给出了功能向导,非常实用。如图

 

由于搜狐是奥运会的官方赞助商,所以搜狐的数据系统的数据得以同奥运赛场的比分系统进行对接,基本上实现了自动化和同步,这一点非常优秀,其奥运赛事直播系统非常强大,如下图:

 

同时搜狐的奥运视频直播,资料等等也都非常及时,能够给用户欣赏奥运带来方便。

同时由于搜狐的搜狗拼音已经占据了50%左右的桌面市场,搜狐利用客户端对金牌进行推广播报也取得了非常好的效果。

总体来说,搜狐对奥运会的报道是非常成功的,这一点,从搜狐近期的alexa也可以得到印证:

 

腾讯QQ

 

相信在网上看奥运的朋友对QQ的金牌弹窗不会陌生吧,一次又一次,那个小企鹅的跳动带给我们一个又一个的好消息,这一点上,QQ做得最为出色。

腾讯QQ的弹窗“异常及时”,据了解,马化腾在这一点下了死命令。

由于QQ庞大的用户平台,所以使得QQ在进行奥运报道的时候占据了非常大的优势,但是总体来说,其网站报道的深入程度,以及信息的全面性只能用一般来进行形容,但是在庞大的用户平台的基础上,这些都不是问题。

QQ依靠了弹窗,门户,qq直播创造了一个又一个的记录,没有办法,谁叫腾讯有qq呢。

QQ同其它的门户相比非常重视互动性,这一点也是它的一个特色和优势。

QQ的金牌榜也非常引人注目,可以说网民现在打开一个网站,最想看到的就是金牌榜了。

 

从qq.com的alexa图上可以看到,奥运对腾讯公司的流量帮助有限,可能是因为其流量已经达到了一个非常高的高度的原因吧。

   

网易163

 

由于市场的原因,网易现在已经越来越走向了网络游戏运营商的方向了,www.163.com将会逐步退出门户网站的行列,网站的频道,流量,对网易公司的贡献都出现了非常大的下降。

163网站的顶部的金牌榜和信息提示栏不错,非常给人冲击力,能够引起用户的关注。

 

163本次的奥运报道突出了视频的功能,很多的消息都通过视频的方式来进行发布,取得了非常好的效果。

163的奥运导航栏也非常不错,能够给网民非常清晰和实用的信息。

 

我最喜欢的一个是“今日观战指南”,将一天的赛事进行分类,中国冲金的,中国的重点赛事,一天的重要赛事,都非常清晰,好像其它的门户网站都没有做得这么出色。也正是这个原因,先在往往是打开163的今日观战指南,然后到sohu上面去看直播。

 

163 也有一个非常大的用户群体,那就是163和126的邮箱,所以163也在邮箱中对奥运信息进行了推送。

 

从163的alexa图来看,奥运对其流量的贡献也有限。

新浪

 

为什么吧新浪放在最后一个,因为我觉得在所有的门户中,这次新浪的表现最差了。

各大门户网站在经过改版之后,网页条理清晰了很多,减少了部分广告的投放,至少是使得广告显得不那么杂乱,但是新浪仅仅是将以前的窄屏换成了宽屏,其它的没有多少的改变,而且广告其多无比,显得比较杂乱。

由于加载的广告过多的原因,新浪的页面的打开速度同其它的门户网站相比显得非常慢,极大的影响了用户体验。

不知道是什么原因,也许新浪对本次奥运的报道并不是非常重视,首页没有对奥运信息进行任何的强调,仅仅是放在以前的新闻栏目。

 

新浪本次对奥运的信息的报道速度一般,没有突出新浪的新闻的优势,不知道是不是新浪的新闻主编陈彤离职带来的影响。

 

  从新浪近期的alexa可以看到,奥运对新浪的流量贡献较小,有一定的帮助,但是幅度不是很大,具体分析是因为新浪以往在新闻方面的优势和良好的口碑带来了部分关注的人群,但是相信如果依照本次的新浪的新闻报道水平,是否能够维持下去值得怀疑。

各大门户网站奥运报道打分

网站

报道速度

页面表现

信息量

总分

搜狐

9

10

9

28

腾讯

10

9

9

28

163

8

8

8

24

新浪

8

7

8

23

posted @ 2008-08-19 12:54 杨睿YoungRay 阅读(410) 评论(6) 编辑
我最近在做一个读书俱乐部的程序,需要实现这样的功能

用户可以增加对自己阅读书的评论等信息,然后也可以添加书的信息,网站管理者也可以添加书的详细信息
如果我想在用户评论页来调用这些详细信息的话通过什么来查询呢?是通过书名还是把所有的书都做到一个表里面去然后同一本书全部使用同一个id这样子?

一直很困惑,所以希望能够在这里得到帮助,希望能够在首页停留几分钟,多谢了
posted @ 2008-06-16 22:54 杨睿YoungRay 阅读(73) 评论(0) 编辑
摘要: 正在写一个程序,需要使用绘图来画一个表格我自己写了这个函数:publicvoiddrawtable(){Graphicsg=groupBox2.CreateGraphics();Penp=newPen(Color.Black,1);g.DrawLine(p,100,100,200,200);}我想程序一运行就显示出这个线,我就在load函数中调用这个函数,但是发现不能显示后来我试了多次,发现如果放...阅读全文
posted @ 2008-05-05 09:39 杨睿YoungRay 阅读(42) 评论(0) 编辑
摘要: 因为有很多的博客或者是sns都没有提供添加swf文件的功能,导致了制作好的flex项目无法实施,没有办法,只能够采用asp.net生成图片来调用了下面是演示:希望大家多多提意见,谢谢大家了阅读全文
posted @ 2008-04-11 20:16 杨睿YoungRay 阅读(55) 评论(0) 编辑
摘要: 在最近做的一个项目中大量使用了urlrewrite,但是后来需要在页面中添加一个form来提交表单,但是这个时候问题出现了,使用默认的<form></form>后点击按钮,页面的url会改变为rewrite之前的地址,这样就非常不方便在网上查了很多的资料,终于找到了一个办法,经过测试是可行的1.下载附件中的ActionlessForm.dll,添加到web项目的refere...阅读全文
posted @ 2008-03-31 18:22 杨睿YoungRay 阅读(161) 评论(0) 编辑
摘要: 忙活了好几天终于完成了我的第一个flex作品,我把他取名称为《读书笔记》,就是能够显示你现在读的书和你以前读过的书后台是用asp.net来写的大家可以去my.txtbook.com.cn 注册一个用户,就可以发布你的读书笔记了,然后后台有获取代码的链接,把代码放带你的博客里面就可以了我这里放个演示给大家看看。 小说下载 书友会 立即参与阅读全文
posted @ 2008-03-26 15:05 杨睿YoungRay 阅读(2478) 评论(7) 编辑
摘要: 这些天在《flex 第一步》的指导下开始学习flex在做的过程中需要使用flex对xml数据进行处理,看了下书,好像还是不明白,后来通过自己的试验终于知道了个大概在这里同大家分享下我的经验XML数据<book><best>销售最好的书籍</best><top><item><title>销售排行榜1</title>&...阅读全文
posted @ 2008-03-24 09:05 杨睿YoungRay 阅读(2506) 评论(0) 编辑