创建一个WCF服务程序,以供WP7调用。
服务主要内容是验证WP7传送过来的用户名、密码,并反馈验证结果。
本人环境为.NET4.0.30319 + Windows 7 6.1.7600.... + IIS7
因为小生的环境是先安装了VS2010和.NET,然后发现WIN7没有默认安装IIS,随后再安装的IIS 7,因此IIS7安装后并没有获得ASP.NET支持,因此要重新注册ASP.NET版本。
用管理员身份打开 cmd 命令提示符,cd到window安装目录下,找到 "X:\Windows\Microsoft.NET\Framework\v4.0.30319" 文件夹,在其下找到 aspnet_regiis.exe 执行文件,执行 aspnet_regiis -i 命令,重新注册 aspnet ,重启IIS后IIS便可支持.NET编译。
创建WCF过程就行不累赘,发布到IIS后的界面如下:
WCF服务不像之前的WebService服务,可以在web中测试服务,必须建立客户端才可调用测试wsdl文件。
打开之前的登录应用,在解决方案资源管理器中点击项目,右键,添加服务引用,在弹出的对话框中的地址栏输入部署在IIS7上的WCF应用地址:
http://localhost:7999/Service1.svc ,点击【前往】,稍等片刻,如WCF应用正常的话,VS2010会寻找到应用并显示在下方。
在得到的WCF应用分析中,可以清楚看到小生添加在服务中的服务函数:checkUser。
接下来就要在WP7中调用此验证函数,得到反馈结果
单击确定,将WCF服务引用到WP7项目中,这时可以看到项目中多出了 ServiceReferences.ClientConfig 文件 与 Service References 服务资源目录,表示引用服务成功。
打开之前的 LoginPop.xaml 文件,打开【开门】按钮中Click(点击)事件,在事件中加入如下代码:
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
if(txtUserId .Text .Trim ().Equals(""))
{
lbl_error.Text = "用户名不能为空!";
txtUserId.Text = "";
return;
}
if (txtPassword.Password.Trim().Equals(""))
{
lbl_error.Text = "密码不能为空!";
txtPassword.Password = "";
return;
}
try
{
//构造WCF代理对象
ServiceReference1.Service1Client proxy = new ServiceReference1.Service1Client();
//设置代理返回结果后的处理事件
proxy.checkUserCompleted += new EventHandler<ServiceReference1.checkUserCompletedEventArgs>(_proxy_WriteResult);
//开始异步调用WCF服务
proxy.checkUserAsync(txtUserId.Text.Trim(), txtPassword.Password.Trim());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
最后再加入返回结果后的处理事件:
private void _proxy_WriteResult(object sender, ServiceReference1.checkUserCompletedEventArgs e)
{
switch(e.Result.ToString()){
case "0":
lbl_error.Text = "验证正确";
break;
case "1":
lbl_error.Text = "用户名错误";
break;
case "2":
lbl_error.Text = "密码错误";
break;
default:
lbl_error.Text = "未知错误!";
break;
}
}
至此,WP7调用WCF服务验证登录的一个小Demo就大功告成了!!
运行这个Demo,验证努力的结果如何吧。
WCF那边正确的用户密码设置为:test / test
第一次输入:ttt / test
第二次输入:test / ttt
第三次输入:test / test