Silverlight中生成验证码一般有三种方式,以下分别介绍。
准备工作:新建一个Silverlight应用程序项目。在MainPage.xaml中加入三个image控件和三个button控件,用来测试三种方式生产的验证码,代码如下
<StackPanel> |
(一)通过一般处理程序ashx在服务器端生成Silverlight客户端调用
1、在web站点新建一般处理程序ImageIdentifyingCode1.ashx
2、添加代码,通过GDI+实现验证码绘制,代码如下:
using System.Web.Services; |
public void ProcessRequest(HttpContext context) |
3、新建一个类IndentifyCodeClass.cs,用来生成验证码字符串
public string CreateIndentifyCode(int count) string allchar = "1,2,3,4,5,6,7,8,9,0,A,a,B,b,C,c,D,d,E,e,F,f," + |
4、在MainPage.xaml.cs中添加客户端引用代码
using System.Windows.Media.Imaging; |
private void HanderButton_Click(object sender, RoutedEventArgs e) |
(二)通过WCF服务在服务器端生成Silverlight客户端调用
1、新建启用Silverlight功能的WCF服务ImageIdentifyingCodeWCF.svc。
2、添加WCF服务代码
using System.Drawing; |
[OperationContract] |
3、编译生成项目,在Silverlight应用中添加服务引用,具体操作略过,不清楚的朋友请自己到网上查阅相关资料。
4、在MainPage.xaml.cs中添加客户端引用代码
using System.IO; |
private void WcfButton_Click(object sender, RoutedEventArgs e) |
(三)在Silverlight客户端使用控件生成矢量图形
1、在类IndentifyCodeClass.cs添加生成验证码代码
using System.Windows.Media.Imaging; |
Random r = new Random(DateTime.Now.Millisecond); |
2、在MainPage.xaml.cs中添加引用代码
private void SlButton_Click(object sender, RoutedEventArgs e) |
小结:从运行速度上看,采用一般处理程序创建的验证码图片速度随着变换次数的增加会变慢,采用WCFServices创建的图片第一次加载速度较 慢,但后面再次加载的的速度最快,Silverlight控件绘图的方法速度略低于WCFServices再次加载的速度,且加载速度始终不变,但由于是 矢量图形字符串显示非常清晰。个人比较喜欢第三种方法,因为为了使用图形验证码而增加一个Web服务个人觉得不太值得。