Silverlight+WCF实现跨域调用

Silverlight+WCF实现跨域调用,第1张

概述      在这篇文章中,WCF扮演服务器,向外提供LoginVaild服务;Silverlight扮演客户端,调用WCF提供的LoginVaild服务。思路有了,下面进行代码实现。   数据库脚本实现   新建T_User表,在表中添加两个字段username、password,向表中插入一条数据admin admin,脚本如下: USE [test]GO/****** Object: T

      在这篇文章中,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 ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_padding ONGOCREATE 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]GOSET ANSI_padding OFFGOINSERT [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,内容如下:

<?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.设定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<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();        }
  到此,客户端配置完成,运行Silverlight客户端项目即可查看结果。源码下载地址:http://pan.baidu.com/s/1mgn3IEO   现在回首整个实现过程,有点面向服务编程的意思:WCF提供一个服务,然后把访问服务的接口公开,想调用此服务的项目只要添加此服务的引用便能调用WCF提供的服务。   在实现过程中,有个问题至今尚未解决,在WCF服务器项目中配置ADO.Net实体数据模型时,如果是用sql Server的sql Server身份验证方式登录,便会报“服务器返回了错误 Not found”异常;改成windows身份验证问题解决。这是个治标不治本的解决方案,对此问题,希望大神能够给出解释。 总结

以上是内存溢出为你收集整理的Silverlight+WCF实现跨域调用全部内容,希望文章能够帮你解决Silverlight+WCF实现跨域调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1011714.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存