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; } } }
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 [email protected]"); 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][email protected] ,[Discribe][email protected] ,[Pwd][email protected] ,[SubmitTime][email protected] WHERE [ID][email protected]"); 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 [email protected]"); 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 } }
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); } }
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; } } }
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
时间: 2024-10-09 01:31:02