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; }
    }
}

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

WCF的例子的相关文章

WCF RestFul例子

这里没有理论上的东西,仅仅是做下记录.我这个例子偷懒下了,直接在VS2008里面建了个WCF服务应用程序 一.接口,用WebGet的时候需要添加命名空间:System.ServiceModel;System.ServiceModel.Web; [ServiceContract] public interface IEmployeeService { [WebGet(UriTemplate = "employees", ResponseFormat = WebMessageFormat.

C#综合揭秘——细说多线程(下)

引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发.其中委托的BeginInvoke方法以及回调函数最为常用.而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作.特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel.其实合理使用I/O线程在通讯项目或文件下载时,能尽量降低IIS的压力.并行编程是Framework4.0中极力推广的

C# 多线程

引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发.其中委托的BeginInvoke方法以及回调函数最为常用.而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作.特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel.其实合理使用I/O线程在通讯项目或文件下载时,能尽可能地减少IIS的压力.并行编程是Framework4.0中极力推

JAVA与.NET的相互调用——通过Web服务实现相互调用

JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候对另一种语言感觉到畏惧.在这里在下向各位介绍一下,JAVA与.NET相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 在这章里面先为大家介绍一下最简单,最常用的Web服务相互调用方式.首先

.Net 与 Java 的服务接口相互调用

本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说一下Web服务的来源,Web服务是一种新的Web应用程序分支,可以执行从简单的请求到复杂商务处理等任何功能.一旦部署以后,其他Web服务应用程序可以发现并调用它部署的服务. Web Service是一种应用程序,它可以使用标准的互联网协议,像超文件传输协议(HTTP).简单对象访问协议(SOAP).

多线程(下)

引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发.其中委托的BeginInvoke方法以及回调函数最为常用.而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作.特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel.其实合理使用I/O线程在通讯项目或文件下载时,能尽量降低IIS的压力.并行编程是Framework4.0中极力推广的

[转]C#综合揭秘——细说多线程(下)

引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发. 其中委托的BeginInvoke方法以及回调函数最为常用. 而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作.特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel.其实合理使用I/O线程在通讯项目或文件下载时,能尽量降低IIS的压力. 并行编程是Framework4.0中极力

C#细说多线程(下)

本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发. 其中委托的BeginInvoke方法以及回调函数最为常用.而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作.特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel.其实合理使用I/O线程在通讯项目或文件下载时,能尽量降低IIS的压力.并行编程是Framework4.0中极力推广的异步

WCF学习笔记(1)-一个完整的例子

一.开发环境 IDE:VS2013 OS:Win10 IIS:IIS 10 二.开发流程 1.项目结构 2.添加一个WCF程序 3.删除系统自动生成的两个文件IService1.cs和Service1.svc 4.添加自定义的WCF服务文件 5.在IUser.cs文件中,定义方法名 注: [ServiceContract]来说明是一个WCF接口,不加的话,不能被外部调用 [OperationContract]来说明该方法是一个WCF接口的方法,不加不能被外部调用 namespace WCFSer