none
IIS7下验证码控件为什么无法显示? RRS feed

  • 问题

  • 以前下载了一个Auto Auth-Code验证码控件,IIS6下一直用着不错。今天在Win7和win2008的IIS上都不显示了。在网上搜索很长时间也没找到解决办法。

    有的说:1、

    昨天挂网站时碰到验证码不显示的问题,在排除了未启用父路径的原因后,经过再三摸索,终于发现原来是IIS找不到生成验证码的控件AjaxControlToolkit.dll。
    
    因为VS会在框架内自带的程序集中查找,而.net中是有这个DLL的,所以在VS下浏览网站是会出来验证码的。
    
    找到此DLL后,直接将其拖进C:/windows/assembly目录中,修改web.config中AjaxControlToolkit的版本号和公钥(与assembly中的一致)。哈哈,久违的验证码终于出来了。

    可DLL根本就拖不到assembly这个文件夹中。

    有的说:2、可能是“处理程序映射”的问题。

    到底怎么办啊,给位大侠给解一下。万分感谢!!!

    2012年9月26日 12:50

答案

  • 非常感谢chenrensong的热心回复。普通验证效果,使用你这种验证码是没有问题的。如果不想让别人盗用你的验证页面就需要使用Auto Auth-Code这种验证码控件了。

    我现在win2008解决问题了,给兄弟们分享一下。

    1、像上面所说,将控件的DLL拖到assembly目录中

    2、再在web.config中添加(在最下面针对IIS7的设置里)

    <system.webServer>
        <handlers>
          <add name="Vincent.AutoAuthCode" type="Vincent.AutoAuthCode.AuthCode,Vincent.AutoAuthCode, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b633909bc009d6d9" verb="GET" path="AuthCode_Image.ashx" />
        </handlers>
    </system.webServer>
    win7中还是没解决,DLL拖不到assembly目录中,比较郁闷,这可能就是普通操作系统和服务器系统的区别吧。

    • 已标记为答案 hkstb 2012年9月27日 10:18
    2012年9月27日 10:18

全部回复

  • 生成验证码其实没必要用第三方控件的  你可以试试我下面的代码

            public void GetVerifyCode()
            {
                //新建位图
                Bitmap newBitmap = new Bitmap(
                                                50,
                                                23,
                                                System.Drawing.Imaging.PixelFormat.Format32bppArgb
                                             );
                //从位图获得绘图画面
                Graphics g = Graphics.FromImage(newBitmap);
                //随机数生成器
                Random r = new Random();
                //绘图画面清空
                g.Clear(Color.White);
    
                //获得随机字符串(4位长度)
                string value = GenerateVerifyCode(4);
                this.Session["VERIFYCODE"] = value.ToString();
                //定义图片显示字体样式
                Font font = new Font(
                                       "宋体",
                                       15,
                                       FontStyle.Bold
                                    );
    
                Random rr = new Random();
                int yy = rr.Next(1, 4);
                //定义随机字符串显示图片刷子
                LinearGradientBrush brush = new LinearGradientBrush(
                                                                      new Rectangle(0, 0, 71, 23),
                                                                      Color.Red,
                                                                      Color.Blue,
                                                                      1.2f,
                                                                      true
                                                                   );
    
    
                g.DrawString(value, font, brush, 2, yy);
                g.DrawRectangle(new Pen(
                                          Color.Silver),
                                          0,
                                          0,
                                          75,
                                          25
                                        );
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                newBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                //输出图片
                Response.ClearContent();
                Response.ContentType = "image/gif";
                Response.BinaryWrite(ms.ToArray());
    
            }
    
            //生成随机字符串
            public static string GenerateVerifyCode(int Length)
            {
                System.Text.StringBuilder verifyCode = new System.Text.StringBuilder(36);
                Random rd = new Random();
    
    
                for (int i = 0; i < Length; i++)
                {
                    verifyCode.Append(VERIFYCODE_CHARS[rd.Next(36)]);
                }
    
                return verifyCode.ToString();
            }
            //常量集
            private static char[] VERIFYCODE_CHARS ={
                                            '0','1','2','3','4','5','6','7','8','9',
                                            'a','b','c','d','e','f','g','h','i','j',
                                            'k','L','m','n','o','p','q','r','s','t',
                                            'u','v','w','x','y','z'
                                        };


    认真的活,认真的爱!

    2012年9月27日 7:49
    版主
  • 非常感谢chenrensong的热心回复。普通验证效果,使用你这种验证码是没有问题的。如果不想让别人盗用你的验证页面就需要使用Auto Auth-Code这种验证码控件了。

    我现在win2008解决问题了,给兄弟们分享一下。

    1、像上面所说,将控件的DLL拖到assembly目录中

    2、再在web.config中添加(在最下面针对IIS7的设置里)

    <system.webServer>
        <handlers>
          <add name="Vincent.AutoAuthCode" type="Vincent.AutoAuthCode.AuthCode,Vincent.AutoAuthCode, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b633909bc009d6d9" verb="GET" path="AuthCode_Image.ashx" />
        </handlers>
    </system.webServer>
    win7中还是没解决,DLL拖不到assembly目录中,比较郁闷,这可能就是普通操作系统和服务器系统的区别吧。

    • 已标记为答案 hkstb 2012年9月27日 10:18
    2012年9月27日 10:18