在这篇文章中。WCF扮演server,向外提供LoginVaild服务。Silverlight扮演client。调用WCF提供的LoginVaild服务。思路有了。以下进行代码实现。

数据库脚本实现

  新建T_User表。在表中加入两个字段username、password,向表中插入一条数据admin admin,脚本例如以下:
USE [test]
GO
/****** Object: Table [dbo].[T_User] Script Date: 09/28/2014 21:12:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[T_User](
[username] [varchar](20) NOT NULL,
[password] [varchar](20) NOT NULL,
CONSTRAINT [PK_T_User] PRIMARY KEY CLUSTERED
(
[username] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[T_User] ([username], [password]) VALUES (N'admin', N'admin')

WCFserver实现

1.新建一个WCF服务库项目,在默认生成的IServer1.cs接口在加入LoginVaild服务的声明:

  [OperationContract]
bool LoginVaild(string userName, string password);

2.加入ADO.Net实体数据模型文件--Model.edmx。用于对数据表T_User的訪问。

3.在Service1.svc中对LoginVaild方法进行实现:

 public bool LoginVaild(string userName, string password)
{
bool result = false;
//须要訪问的ADO.Net数据实体模型
using (SLtestEntitiesSecond entities = new SLtestEntitiesSecond())
{
var user = entities.T_User.Where(c => c.username == userName && c.password == password).SingleOrDefault();
if (user == null)
{
result = false;
}
else
{
result = true;
} }
return result;
}

4.在项目的根文件夹加入跨域訪问文件clientaccesspolicy.xml。内容例如以下:

<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>

5.设定WCFserver使用特定port进行訪问,方法:选中WCFserver项目-->邮件属性-->Web-->特定port,输入1316。这样保证我们每次能够通过1316port訪问WCF提供的服务。

到此。WCFserver端配置完毕,选中Service1.svc文件。在浏览器中浏览器下WCF提供的服务。

Silverlightclient实现

  1.新建Silverlight应用程序。在引用中加入服务引用,在地址栏输入Service1.svc文件在浏览器中的路径,比方我的是:http://localhost:1316/Service1.svc
  2.新建Silverlight用户控件Login.xaml文件,在显示页面加入username、passwordTextBox和登录Button。
  3.在Login.xaml后台通过调用WCF提供的服务对用户输入进行推断,代码例如以下:
    private void button1_Click(object sender, RoutedEventArgs e)
{
string userName = txtusername.Text.Trim();
string password = txtpassword.Text.Trim();
Service1Client client = new Service1Client();
client.LoginVaildCompleted += new EventHandler<LoginVaildCompletedEventArgs>(client_LoginVaildCompleted);
client.LoginVaildAsync(userName, password);
client.CloseAsync();
} void client_LoginVaildCompleted(object sender, LoginVaildCompletedEventArgs e)
{
if (e.Error == null)
{
//MessageBox.Show(e.Result.ToString());
if (e.Result == true)
{
this.Content = new MainPage(); }
else
{
MessageBox.Show("用户名或密码错误!");
}
}
else
{
MessageBox.Show(e.Error.ToString());
}
}

4.在App.xaml配置文件设置Login.xaml为起始页,代码例如以下:

  private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new Login();
}

到此。client配置完毕,执行Silverlightclient项目就可以查看结果。源代码下载地址:http://pan.baidu.com/s/1mgn3IEO

  如今回首整个实现过程。有点面向服务编程的意思:WCF提供一个服务,然后把訪问服务的接口公开,想调用此服务的项目仅仅要加入此服务的引用便能调用WCF提供的服务。
  在实现过程中,有个问题至今尚未解决,在WCFserver项目中配置ADO.Net实体数据模型时,假设是用SQL Server的SQL Server身份验证方式登录,便会报“server返回了错误 Not found”异常;改成Windows身份验证问题解决。

这是个治标不治本的解决方式。对此问题。希望大神可以给出解释。

最新文章

  1. [公告]Senparc.Weixin.MP v14.2.1 升级说明
  2. 获取Executor提交的并发执行的任务返回结果的两种方式/ExecutorCompletionService使用
  3. Javascript面向对象编程一:基础篇
  4. 采用CSS3的动态元素(动画)设计div块的层级式展现
  5. 开源中国IOSclient
  6. 去除a标签链接触摸时产生边框
  7. MySQL修改表字段相关信息
  8. ●POJ 1329 Circle Through Three Points
  9. Springboot 系列(九)使用 Spring JDBC 和 Druid 数据源监控
  10. vue中html模板使用绑定的全局函数
  11. UE4动画及相关物理的更新顺序图
  12. 微信小程序开发(2) 计算器
  13. 自己实现atoi
  14. python 小练习 11
  15. Daily Scrum (2015/10/26)
  16. mongodb_修改器($inc/$set/$unset/$push/$pop/upsert)
  17. UVA 11573 - Ocean Currents(BFS+优先队列)
  18. SSH文件上传代码片段
  19. iOS kvo 结合 FBKVOController 的使用
  20. 2015 Multi-University Training Contest 5 1009 MZL&#39;s Border

热门文章

  1. cesium primitive方式 ————http://blog.sina.com.cn/s/blog_15e866bbe0102y0ji.html
  2. CSS 实现斑马条纹
  3. docker 入门学习
  4. 18第一章 ASP.Net内建对象
  5. &lt;Linux&gt; 下安装和卸载JDK
  6. 反连接NOT EXISTS子查询中有or 谓词连接条件SQL优化一例
  7. 56.fielddata filter的细粒度内存加载控制
  8. Django之初
  9. Lucene实现全文检索的流程
  10. [luoguP2401] 不等数列