Silverlight+WCF实现跨域调用

在这篇文章中,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,内容如下:

<?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文件在浏览器中的路径,比如我的是::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();

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6935b0e9f4fbe8219399fef03b2528c1.html