首页 > 代码库 > WCF的例子

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生成客户端代码和配置。

 

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

WCF的例子