分类: 技术2012-03-31 12:29 940人阅读 评论(0) 收藏 举报

代码下载

程序结构

移动手机开发企业应用,常常会访问远程数据库(云端数据库),往往通过WCF对外提供接口访问。程序结构一般是:Silverlight+WCF+Sql Server数据库

下面就是以操作用户User为例,移动终端通过调用WCF实现对数据库的基本操作(增删改查)。
1.数据库
1)创建数据库表
CREATE TABLE [dbo].[User](
 [UserID] [int] IDENTITY(1,1) NOT NULL,
 [UserName] [nchar](100) NOT NULL,
 CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
(
 [UserID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
2.WCF
1)定义接口
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string RetrieveUser();
        [OperationContract]
        bool CreateUser(string userName);
        [OperationContract]
        bool UpdateUser(int userID, string userName);
        [OperationContract]
        bool DeleteUser(int userID);
    }
2)实现接口
 public class Service1 : IService1
    {
        //查询用户
        public string RetrieveUser()
        {
            try
            {
                SqlConnection _sqlConnection =
                   new SqlConnection("Database=test1;Server=lochost;Integrated Security=false;password=1;user id=sa;");
                _sqlConnection.Open();
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = new SqlCommand("SELECT * FROM [User]",
                     _sqlConnection);
                DataSet ds = new DataSet();
                da.Fill(ds);
                StringBuilder sb = new StringBuilder();
                sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
                sb.Append("<Users>");
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    sb.Append("<User>");
                    sb.Append("<UserID>");
                    sb.Append(dr[0].ToString());
                    sb.Append("</UserID>");
                    sb.Append("<UserName>");
                    sb.Append(dr[1].ToString());
                    sb.Append("</UserName>");
                    sb.Append("</User>");
                }
                sb.Append("</Users>");
                _sqlConnection.Close();
                return sb.ToString();
            }
            catch (Exception ex)
            {
                return string.Empty;
            }
        }
        //创建用户
        public bool CreateUser(string userName)
        {
            try
            {
                SqlConnection _sqlConnection =
                    new SqlConnection("Database=test1;Server=lochost;Integrated Security=false;password=1;user id=sa;");
                _sqlConnection.Open();
                SqlCommand command = new SqlCommand();
                command.Connection = _sqlConnection;
                command.CommandType = CommandType.Text;
                command.CommandText = "INSERT INTO [User]  ([UserName]) VALUES ('" +
                    userName.ToString().Replace("'", "''") + "')";
                command.ExecuteNonQuery();
                _sqlConnection.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        //更新用户
        public bool UpdateUser(int userID, string userName)
        {
            try
            {
                SqlConnection _sqlConnection =
                    new SqlConnection("Database=test1;Server=lochost;Integrated Security=false;password=1;user id=sa;");
                _sqlConnection.Open();
                SqlCommand command = new SqlCommand();
                command.Connection = _sqlConnection;
                command.CommandType = CommandType.Text;
                command.CommandText = "UPDATE [User] " +
                    "SET [UserName] = '" +
                     userName.ToString().Replace("'", "''") + "'" +
                    "WHERE [UserID] = " + userID.ToString();
                command.ExecuteNonQuery();
                _sqlConnection.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        //删除用户
        public bool DeleteUser(int userID)
        {
            try
            {
                SqlConnection _sqlConnection =
                    new SqlConnection("Database=test1;Server=lochost;Integrated Security=false;password=1;user id=sa;");
                _sqlConnection.Open();
                SqlCommand command = new SqlCommand();
                command.Connection = _sqlConnection;
                command.CommandType = CommandType.Text;
                command.CommandText = "DELETE [User] WHERE [UserID] = "
                                      + userID.ToString();
                command.ExecuteNonQuery();
                _sqlConnection.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
3)允许跨域访问
建立clientaccesspolicy.xml文件,放于WCF项目根目录
<?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>
3.Silverlight
1)添加Web引用
2)异步调用WCF中对象方法

 private ServiceReference1.Service1Client userSvcClient;
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            userSvcClient = new ServiceReference1.Service1Client();
            //模拟一个用户
            string userName = "zhaoyu";
            //注册CreateUserCompleted事件
            userSvcClient.CreateUserCompleted += new EventHandler<ServiceReference1.CreateUserCompletedEventArgs>(userSvcClient_CreateUserCompleted);
            //调用CreateUserAsync()方法创建用户
            userSvcClient.CreateUserAsync(userName);
        }

void userSvcClient_CreateUserCompleted(object sender, ServiceReference1.CreateUserCompletedEventArgs e)
        {
            //完成CreateUserAsync()方法后回调.
            if (e.Error == null)
            {
                errMessage.Content = "创建用户成功!";

}
            else
            {
                errMessage.Content = e.Error.ToString();

}
        }

Silverlight调用WCF(1)的更多相关文章

  1. Silverlight调用一般性处理程序模拟Silverlight调用WCF效果(2)

    [置顶] Silverlight调用一般性处理程序模拟Silverlight调用WCF效果(2) 分类: 技术2012-03-31 12:51 548人阅读 评论(0) 收藏 举报 silverlig ...

  2. 使用Task简化Silverlight调用Wcf

    原文http://www.cnblogs.com/lemontea/archive/2012/12/09/2810549.html 从.Net4.0开始,.Net提供了一个Task类来封装一个异步操作 ...

  3. Silverlight客户端调用WCF服务难题解疑

    一:解决办法 Silverlight客户端调用WCF服务在实际使用中经常会出现的问题就是无法直接应用类文件和配置文件.微软针对这一情况已经给出了解决办法.WCF开发框架可以帮助我们实现可靠性较高的跨平 ...

  4. WCF基础教程之开篇:创建、测试和调用WCF

    一转眼,又半个月没有更新博客了.说实话,最近确实是有点忙.不过即使再忙忙,也要抽空来学习一些东西.最近用WCF比较多,就来跟大家分享一下关于WCF的知识吧!为了让大家都能看懂,照顾一些没有学过WCF的 ...

  5. silverlight与wcf双向通讯 例子

    本文将建立一个silverlight与wcf双向通讯的简单实例,以下是详细步骤: 新建Silverlight应用程序,名称WCFtest.解决方案中添加WCF服务应用程序,名称WcfServiceTe ...

  6. 系列文章--Silverlight与WCF通信

    Silverlight与WCF通信(一) :Silverlight通过httpBinding访问IIS宿主WCF 摘要: 首语本人在学习Silverlight 和 WCF的时候,各种问题层出不穷,在园 ...

  7. 【Win 10应用开发】手动调用WCF服务

    调用服务最简单的方法就是,直接在VS里面添加服务引用,输入服务的地址即可,无论是普通Web服务,还是WCF服务均可.VS会根据获取到的元数据,自动生成客户端代码. 如果服务的调用量很大,应用广泛,可以 ...

  8. 【原创经验分享】JQuery(Ajax)调用WCF服务

    最近在学习这个WCF,由于刚开始学 不久,发现网上的一些WCF教程都比较简单,感觉功能跟WebService没什么特别大的区别,但是看网上的介绍,就说WCF比WebService牛逼多少多少,反正我刚 ...

  9. c# 动态调用WCF方法笔记!

    //动态调用wcf方法 string url = "http://localhost:54379/ServiceWCF.svc"; IDoubleService proxy = W ...

随机推荐

  1. (C/C++学习)17.bitset(位操作)

    说明:bitset 就像 vector 一样,是 C++ 的一个类模板库,用来对一个数的二进制位进行管理.判断等操作,使用时需要包含头文件 #include<bitset>. 1.声明及定 ...

  2. 样例GeoQuiz应用开发 第2章

    先介绍一下MVC,Model View Controller,是软件架构中最常见的一种框架. 简单来说就是通过 controller 的控制去操作 model 层的数据,并且返回给 view 层展示, ...

  3. Java多线程基础(面试向)

    ----?为什么要用到多线程 CPU是以时间片的方式为进程分配CUP处理时间的,如果当一个进程同时要完成几件事的时候,如当从网上下载文件的时候,需要一边下载一边显示进度而且还要一边保存,如果按照单线程 ...

  4. Matlab学习笔记(三)

    二.MATLAB基础知识 (四)数组 MATLAB总是把数组看作存储和运算的基本单位,标量数据也被看作是(1×1)的数组 一维数组的创建 创建一维数组的几种方法:(e_two_14.m) 直接输入法: ...

  5. Caused by: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。

    异常详情 2017-07-16 10:55:26,218 ERROR [500.jsp] - java.io.IOException: 你的主机中的软件中止了一个已建立的连接. org.apache. ...

  6. 洛谷 1850 NOIP2016提高组 换教室

    [题解] 先用floyed处理出两点间的最短路. 设f[i][j][k]表示走到第i个教室,总共换了j次,当前换或者不换,期望的最小移动距离. 分情况讨论来转移即可. #include<cstd ...

  7. LaTex/Overleaf使用笔记

    1. 添加网页引用 @misc{ r1,   author = "Wikipedia",   title = "Binary decision diagram --- { ...

  8. .NET一般处理程序如何获取AJAX传递的参数

    POST的话 要用 HttpContext.Request.Form 和 HttpContext.Request.Params[""]   GET对应HttpContext.Req ...

  9. 全文搜索(A-2)-推荐算法

    一般来说推荐算法分为两类. 基于内容过滤的推荐: 基于协同过滤的推荐: 基于内容过滤的推荐,基于特征码描述项目. 协同过滤算法的设计基于一个假设,“和目标用户相似度高的用户,其感兴趣的物品目标用户也会 ...

  10. bzoj 1413 [ZJOI2009]取石子游戏

    1413: [ZJOI2009]取石子游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 747  Solved: 490[Submit][Statu ...