在这篇文章中,WCF扮演服务器,向外提供LoginVaild服务;Silverlight扮演客户端,调用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')

WCF服务器实现

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,内容如下:

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

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

Silverlight客户端实现

1.新建Silverlight应用程序,在引用中添加服务引用,在地址栏输入Service1.svc文件在浏览器中的路径,比如我的是:http://localhost:1316/Service1.svc;

2.新建Silverlight用户控件Login.xaml文件,在显示页面添加用户名、密码TextBox和登录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(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();

}

到此,客户端配置完成,运行Silverlight客户端项目即可查看结果。源码下载地址:

------------------------------------------分割线------------------------------------------

具体下载目录在 /2015年资料/2月/27日/Silverlight+WCF实现跨域调用/

------------------------------------------分割线------------------------------------------

现在回首整个实现过程,有点面向服务编程的意思:WCF提供一个服务,然后把访问服务的接口公开,想调用此服务的项目只要添加此服务的引用便能调用WCF提供的服务。

在实现过程中,有个问题至今尚未解决,在WCF服务器项目中配置ADO.Net实体数据模型时,如果是用SQL Server的SQL Server身份验证方式登录,便会报“服务器返回了错误 Not found”异常;改成Windows身份验证问题解决。这是个治标不治本的解决方案,对此问题,希望大神能够给出解释。

linux c调用wcf服务,Silverlight+WCF实现跨域调用相关推荐

  1. 【转载】一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)

    一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例) JSONP(JSON with Padding)可以看成是JSON的一种"使用模式",用以解决" ...

  2. WCF 4.0 REST Service JSON跨域调用

    最近在项目中用到了 WCF4.0 REST.在跨域调用时走了不少弯路,查了不少技术强人的文章,其实它真的就这么容易.好了不废话了直接贴代码. 调用的服务类:  1     [ServiceContra ...

  3. jquery跨域调用wcf

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

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

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

  5. 以短链服务为例,探讨免AppKey、免认证、Ajax跨域调用新浪微博API

    新浪微博的API官方提供了很多种调用方式,支持编程的,归根结底就是两种: 1.基于Oauth协议,使用Open API.(http://open.weibo.com/wiki/%E6%8E%88%E6 ...

  6. jquery ajax跨域asp,jQuery跨域调用Asp.Net Web API

    Asp.Net Web API是一个轻量级的Web服务,当Web API和Web程序不是部署在同一域的时候,要使用jQuery来实现调用API的接口就存在跨域的问题.下面介绍两种方式来解决jQuery ...

  7. js php调用webservice,js跨域调用WebService的使用方法

    这次给大家带来js跨域调用WebService的使用方法,js跨域调用WebService的注意事项有哪些,下面就是实战案例,一起来看一下. 步骤1. 在web.config中的system.web节 ...

  8. vue 调用webservice_js跨域调用WebService的简单实例

    步骤1. 在web.config中的system.web节点里加入 步骤2.webservice代码 using System; using System.Collections.Generic; u ...

  9. 跨域调用WebService

    WebService使用还是比较广泛的,这里我们来介绍两种跨域请求调用WebService的方法. 首先我们来介绍下什么是WebService,Web Service也叫XML Web Service ...

最新文章

  1. TablePlus 3中文版
  2. Android自定义控件前导基础知识学习(一)——Canvas
  3. 四川师范学院C语言实验报告,C语言【四川师范大学文理学院吧】_百度贴吧
  4. 我的jekyll配置和修改
  5. python tkinter图片为什么要设置全局变量_为什么这里一定要设置全局变量
  6. 手工释放linux内存——/proc/sys/vm/drop_caches
  7. CCD 与 CMOS
  8. scrapy框架系列 (2) 一个简单案例
  9. 植树问题python_《程序员的数学》思考题(一)
  10. 神经网络可以计算任何函数的可视化证明
  11. Spring之Bean后处理器——BeanPostProcessor的使用与源码解析
  12. 奥克兰大学计算机领域优势,奥克兰大学世界排名及优势专业排名解析
  13. Java毕设项目超市进销存管理系统计算机(附源码+系统+数据库+LW)
  14. 三阶齐次线性方程求通解_非齐次线性方程通解求法------常数变易法.ppt
  15. weglogic 创建domian启动卡住
  16. CSS 阴影技巧与细节
  17. 探访地面通数据中心:绿色、智能、安全
  18. 百度云盘上传显示服务器异常,百度网盘常见问题之网络异常,这里有最全面的解决方法...
  19. 数列 COGS1048:[Citric S2] 一道防AK好题
  20. 行人重识别数据集汇总

热门文章

  1. 【2017-07-03】JS连续删除table中的选中的多行数据
  2. linux 入门教程
  3. Canvas 属性,方法
  4. (三) 类图和对象图
  5. mac svn .a文件的上传方法
  6. (xy)+((x^y)1)
  7. ms sql 聚合事例
  8. 一个基于C++的多线程编程实例(CreateThread函数)
  9. LeetCode6-Z字形变换
  10. python 语言教程(3)变量