zoukankan      html  css  js  c++  java
  • WCF的例子

    Demo的 “Service端”以本机IIS为宿主,“Client端”以WebForm项目为例。

    1、新建项目:WCF》WCF Service Application;

    2、删除默认文件IService.cs与Service.svc。并分别创建增、删、改、查”Add.svc”、“Save.svc”、“Remove.svc”、“Get.svc,Search.svc”,分别对应4个功能的服务应用程序WCF服务应用程序,并创建数据操作层和数据实体层

    3、增加实体层和数据操作层代码,注意实体层类和属性添加了数据契约 [DataContract] [DataMember]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.ServiceModel;
    using System.Runtime.Serialization;
    
    namespace Model
    {
        [DataContract]
        public class UserInfo
        {
            [DataMember]
            public int ID { get; set; }
            [DataMember]
            public string Name { get; set; }
            [DataMember]
            public string Pwd { get; set; }
            [DataMember]
            public string Discribe { get; set; }
            [DataMember]
            public DateTime SubmitTime { get; set; }
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace DAL
    {
        public class UserInfo
        {
            #region Convert Method
            public Model.UserInfo ConvertToModel(DataRow row)
            {
                Model.UserInfo model = new Model.UserInfo();
                model.ID = row["ID"] == DBNull.Value ? 0 : Convert.ToInt32(row["ID"]);
                model.Name = row["Name"] + "";
                model.Pwd = row["Pwd"] + "";
                model.Discribe = row["Discribe"] + "";
                model.SubmitTime = row["SubmitTime"] == DBNull.Value ? DateTime.Now : Convert.ToDateTime(row["SubmitTime"]);
                return model;
            }
    
            public List<Model.UserInfo> ConvertToList(DataTable dt)
            {
                List<Model.UserInfo> list = new List<Model.UserInfo>();
                if (dt != null)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        DataRow row = dt.Rows[i];
                        list.Add(ConvertToModel(row));
                    }
                }
                return list;
            }
            #endregion
    
            #region 代码生成
    
            /// <summary>
            /// 添加一条数据
            /// </summary>
            /// <param name="model">数据实体</param>
            /// <returns></returns>
            public int Append(Model.UserInfo model)
            {
                SqlParameter[] para =
                {
                    new SqlParameter("@Discribe",model.Discribe),
                    new SqlParameter("@Name",model.Name),
                    new SqlParameter("@Pwd",model.Pwd),
                    new SqlParameter("@SubmitTime",model.SubmitTime)
                };
                StringBuilder cmdText = new StringBuilder();
                cmdText.Append(@"INSERT INTO UserInfo(
                                           Name
                                         ,Pwd
                                         ,Discribe
                                         ,SubmitTime
                              ) VALUES(
                                        @Name
                                         ,@Pwd
                                         ,@Discribe
                                         ,@SubmitTime
                        );select @@IDENTITY");
    
                object obj = SqlHelper.GetScalar(CommandType.Text, cmdText.ToString(), para);
                if (obj != null && obj != DBNull.Value)
                {
                    return Convert.ToInt32(obj);
                }
                return 0;
            }
    
            /// <summary>
            /// 删除一个实体
            /// </summary>
            /// <param name="_entity"></param>
            /// <returns></returns>
            public int DeleteEntity(System.Int32 ID)
            {
                SqlParameter[] para =
                {
                    new SqlParameter("@ID",ID),
                };
                StringBuilder cmdText = new StringBuilder();
                cmdText.Append(@"DELETE FROM [UserInfo]
                                        WHERE ID=@ID");
                return SqlHelper.ExecuteNonQuery(CommandType.Text, cmdText.ToString(), para);
            }
    
            /// <summary>
            /// 修改一个实体
            /// </summary>
            /// <param name="_entity"></param>
            /// <returns></returns>
            public int ModifyEntity(Model.UserInfo model)
            {
                SqlParameter[] para =
               {
                    new SqlParameter("@ID",model.ID),
                     new SqlParameter("@Discribe",model.Discribe),
                    new SqlParameter("@Name",model.Name),
                    new SqlParameter("@Pwd",model.Pwd),
                    new SqlParameter("@SubmitTime",model.SubmitTime)
                };
    
                StringBuilder cmdText = new StringBuilder();
                cmdText.Append(@"UPDATE [UserInfo]
                                    SET [Name]=@Name
                                       ,[Discribe]=@Discribe
                                         ,[Pwd]=@Pwd
                                         ,[SubmitTime]=@SubmitTime
                                  WHERE [ID]=@ID");
                return SqlHelper.ExecuteNonQuery(CommandType.Text, cmdText.ToString(), para);
            }
    
            /// <summary>
            /// 获得一个实体根据ID
            /// </summary>
            /// <param name="_id"></param>
            /// <returns></returns>
            public Model.UserInfo GetEntity(int ID)
            {
                SqlParameter[] para =
                {
                    new SqlParameter("@ID",ID),
                };
                StringBuilder cmdText = new StringBuilder();
                cmdText.Append(@"SELECT * FROM UserInfo WHERE ID=@ID");
                DataSet ds = SqlHelper.GetDataSet(CommandType.Text, cmdText.ToString(), para);
                if (ds != null && ds.Tables.Count > 0)
                {
                    return ConvertToModel(ds.Tables[0].Rows[0]);
                }
                return null;
            }
    
            /// <summary>
            /// 查询所有数据
            /// </summary>
            /// <returns></returns>
            public List<Model.UserInfo> GetList()
            {
                StringBuilder cmdText = new StringBuilder();
                cmdText.Append(@"SELECT * FROM UserInfo");
                DataSet ds = SqlHelper.GetDataSet(CommandType.Text, cmdText.ToString(), null);
    
                if (ds != null && ds.Tables.Count > 0)
                {
                    return ConvertToList(ds.Tables[0]);
                }
                return new List<Model.UserInfo>();
            }
            #endregion
        }
    }
    View Code

    4、接口修改,其余接口对比着也改下。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    
    namespace WcfService1
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IAdd”。
        [ServiceContract]
        public interface IAdd
        {
            [OperationContract]
            bool DoWork(Model.UserInfo model);
        }
    }
    View Code

    5、Add.svc服务修改,参数是UserInfo类型,已经加注了数据契约;其余服务也对比着改下。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    
    namespace WcfService1
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Add”。
        // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 Add.svc 或 Add.svc.cs,然后开始调试。
        public class Add : IAdd
        {
            public bool DoWork(Model.UserInfo model)
            {
                return new DAL.UserInfo().Append(model) > 0;
            }
        }
    }
    View Code

    6、发布与部署,编译后把WCF服务项目发布出来,部署到IIS上。我部署后是 http://localhost:8011/,输入到浏览器上,会自动出现所有服务。

    例:http://localhost:8011/Add.svc,会提示已创建服务。

    7、创建一个WebForm项目,增加一个Add.aspx页面。使用SvcUtil.exe生成客户端代码和配置。

    8、使用SvcUtil.exe生成客户端代码和配置

    SvcUtil.exe是一个VS命令行工具,该工具位于:C:Program FilesMicrosoft SDKsWindowsv7.0Ain 或 C:Program Files (x86)Microsoft SDKsWindowsv7.0Ain一般情况下我们将SvcUtil.exe添加到VS开发工具中方便以后的运用(也可直接使用该命令行工具)。

    1)在VS中的Tools(工具)菜单---选择External Tools(外部工具),打开管理窗口》添加》

    Title(标题)输入SvcUtil》Command(命令)选择SvcUtil.exe全路径》Arguments(参数)为空》Initial Directory(初始目录)输入$(SolutionDir)》下面的复选框勾选 Prompt for argument(提示输入参数),其他不勾

    Initial  directory(初始目录)栏选择生成的客户端代码和配置文件所放的目录(此处为解决方案所在目录),选上Prompt for arguments(提示输入参数)。

    2)添加完成后,在VS的工具下会出现SvcUtil这个菜单。

    3)在WebForm端添加对服务的引用。打开SvUtil工具,在Arguments(参数)里填写服务的地址:http://localhost:8011/Add.svc,

    点确定,会在解决方案根目录下生产三个文件:Add.cs、output.config、Service2.cs;这是代理类和配置文件。

    9、在Client端使用代理类与配置;将代理类从服务端的物理目录拷贝出来,放到Client端,并适当的修改代码,加入自己需要的名称空间,

    使用方法:

    protected void Button1_Click(object sender, EventArgs e)
            {
                AddClient addClient = new AddClient();
                Model.Add.UserInfo user = new Model.Add.UserInfo();
                user.Name = this.txtName.Text;
                user.Discribe = this.txtDiscribe.Text;
                user.Pwd = this.txtPwd.Text;
                user.SubmitTime = System.DateTime.Now;
                addClient.DoWork(user);
                Response.Write("添加成功!");
            }
    View Code

    10、将生成的配置文件中的 <system.serviceModel>复制到Client的Web.config中,需要复制的节点为 bindings、client。

    来源:

    http://www.cnblogs.com/iamlilinfeng/p/4083827.html

    http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html

    http://www.cnblogs.com/iamlilinfeng/archive/2012/09/26/2703759.html

    http://www.cnblogs.com/iamlilinfeng/archive/2012/10/01/2706353.html

  • 相关阅读:
    HDU 2844 Coins(多重背包)
    HDU 4540 威威猫系列故事——打地鼠(DP)
    Codeforces Round #236 (Div. 2)
    FZU 2140 Forever 0.5
    HDU 1171 Big Event in HDU(DP)
    HDU 1160 FatMouse's Speed(DP)
    ZOJ 3490 String Successor
    ZOJ 3609 Modular Inverse
    ZOJ 3603 Draw Something Cheat
    ZOJ 3705 Applications
  • 原文地址:https://www.cnblogs.com/xsj1989/p/7093053.html
Copyright © 2011-2022 走看看