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

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    分布式架构在农业银行的应用实践与展望
  • 原文地址:https://www.cnblogs.com/xsj1989/p/7093053.html
Copyright © 2011-2022 走看看