在这篇文章中。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身份验证问题解决。

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

Silverlight+WCF实现跨域调用的更多相关文章

  1. 实现jquery.ajax及原生的XMLHttpRequest跨域调用WCF服务的方法

    关于ajax跨域调用WCF服务的方法很多,经过我反复的代码测试,认为如下方法是最为简便的,当然也不能说别人的方法是错误的,下面就来上代码,WCF服务定义还是延用上次的,如: namespace Wcf ...

  2. jquery跨域调用wcf

    使用jquery跨域调用wcf服务的时候会报如下错误 $.ajax({ url: 'http://localhost:28207/Service1.svc/GetData', method: 'get ...

  3. 支持ajax跨域调用的WCF搭建示例

    支持ajax 跨域调用的WCF搭建 1.新建一个"ASP.NET空Web应用程序"项目. 2.新建一个“WCF服务(支持ajax)”. 3.修改WCFAjaxService.svc ...

  4. AJAX跨域调用ASP.NET MVC或者WebAPI服务的解决方案

    问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模板创建一个最简单的ASP.NET Web ...

  5. 关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案

      作者:陈希章 时间:2014-7-3 问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模 ...

  6. web api 跨域请求,ajax跨域调用webapi

    1.跨域问题仅仅发生在Javascript发起AJAX调用,或者Silverlight发起服务调用时,其根本原因是因为浏览器对于这两种请求,所给予的权限是较低的,通常只允许调用本域中的资源,除非目标服 ...

  7. AJAX跨域调用ASP.NET MVC或者WebAPI服务

    关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案 作者:陈希章 时间:2014-7-3 问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP. ...

  8. Javascript实现简单跨域调用

    什么是JSONP? 1.一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面.动态网页.web服务.WCF,只要是跨域请求,一律不准: 2.不过我们又发现,Web页面 ...

  9. ajax——CORS跨域调用REST API 的常见问题以及前后端的设置

    RESTful架构是目前比较流行的一种互联网软件架构,在此架构之下的浏览器前端和手机端能共用后端接口. 但是涉及到js跨域调用接口总是很头疼,下边就跟着chrome的报错信息一起来解决一下. 假设:前 ...

随机推荐

  1. cf536c——思路题

    题目 题目:Lunar New Year and Number Division 题目大意:给定一个数字序列,可以任意分组(可调整顺序),但每组至少两个,求每组内数字和的平方的最小值 思路 首先,易证 ...

  2. redisd的非持久化配置

    如何关闭redis持久化?我的需求是只把redis当作缓存来用,所以持久化到硬盘对我的需求来说没有意义. 修改redis配置文件,redis.conf 第115行左右. 1.注释掉原来的持久化规则 # ...

  3. vc++实现控制USB设备启用与否

    #include <WINDOWS.H>      #include <TCHAR.H>      #include <SETUPAPI.H>      //#in ...

  4. hdfs深入:06、hdfs的写入过程

    7.HDFS的文件写入过程 详细步骤解析: 1. client发起文件上传请求,通过RPC与NameNode建立通讯,NameNode检查目标文件是否已存在,父目录是否存在,返回是否可以上传: 2. ...

  5. CocoaPods 命令和使用

    CocoaPods 命令 pod init 在新建的项目根目录下运行该命令,为当前项目新建podfile文件. pod install 下载和配置 podfile里定义的项目依赖(不包括已经下载和配置 ...

  6. 网络共享服务器 samba

    之前给自己centos 服务器配置了一下samba网络共享,主要是在windwos上编程,然后方便代码同步到linux上进行编译,现在大概记录一下过程,免得下次又忘记了 首先获取root权限 :su ...

  7. 在CentOS6.4上安装GitLab

    1.Install and configure the necessary dependencies On CentOS 6 (and RedHat/Oracle/Scientific Linux 6 ...

  8. Centos6.8 安装mongo3.6以及权限配置和开启外网链接

    目录 安装环境和版本说明,以及参考文档链接 安装MongoDB数据库 运行MongoDB数据库 删除卸载MongoDB 配置MongoDB管理员用户 修改配置文件,允许外网链接 安装配置完成,使用Ro ...

  9. 转:Centos7安装zabbix3.4超详细步骤解析

    安装前准备: 1.1 安装依赖包: yum -y install wget net-snmp-devel OpenIPMI-devel httpd openssl-devel java lrzsz f ...

  10. nginx配置location项的URL匹配规则

    Localtion URL的正则匹配规则 示例 location / { try_files $uri @apache; } #所有的路径都是/开头,表示匹配所有 location @apache { ...