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 ? : 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 = ; 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 ;
} /// <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 > )
{
return ConvertToModel(ds.Tables[].Rows[]);
}
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 > )
{
return ConvertToList(ds.Tables[]);
}
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) > ;
}
}
}

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 Files\Microsoft SDKs\Windows\v7.0A\bin 或 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\一般情况下我们将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("添加成功!");
}

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

WCF的例子的更多相关文章

  1. WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]

    WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...

  2. WCF实现事件通知相关应用技巧介绍

    WCF实现事件通知是一个比较容易掌握的知识点,不过在实现的过程中,我们还是需要注意一些事项,以保证功能的完善性. WCF中有一些方法的应用对于初学者来说还是比较容易应用.只要熟练的联系这些方法操作,一 ...

  3. WCF 4.0 使用说明

    WCF 4.0开发说明,工具VS2013 ,IIS,使用http协议 打开VS2013,新建项目Visual C#>Web>Asp.NET Web应用程序,添加相关引用: System.S ...

  4. 我的WCF摸爬滚打之路(1)

    等了好久终于等到今天!盼了好久终于把梦实现……哈哈,仅以此歌词来庆祝我为期3天的wcf学习之路圆满结束. 今天写这个文章的目的在于记录一下我自己在学习WCF的时候碰到的一些问题,俗话说,好记心不如烂笔 ...

  5. .Net remoting, Webservice,WCF,Socket区别

    传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service).比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个"服务& ...

  6. 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问

    中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

  7. jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding

    Jquery ajax调用WCF服务 例子效果如下:原界面 点击按钮GetList get后,通过指定的Url获取数据添加到table 新建一个控制台项目,添加IContract.cs,DBServi ...

  8. 每天进步一点--WCF学习笔记

    最近买了一本书WCF服务编程,重头再开始了解学习WCF,现将学习记录,以便后来复习,也希望和大家一起进步. WCF用终结点表示一种组成关系,终结点就是地址.契约与绑定的混合品,即 地址(Address ...

  9. C#多线程介绍(下)

    转载原文:这里是链接内容 转载原文:这里写链接内容 转载原文:这里写链接内容 (重要事情说三遍) 引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个 ...

随机推荐

  1. 关于Oracle与MySQL的使用总结

    平时使用的比较多的数据库管理系统就是Oracle和MySQL,我在这里记录下使用过程中的遇到的问题以及解决方案,以备不时之需 Oracle 关于表空间 Oracle创建数据的代价还是比较大的,所以使用 ...

  2. windows下面安装easy_install和pip教程

    方便安装whl:安装完成后,可以使用pip install   xxx.whl 安装一个python轮子 python扩展库的路径:Python\Python36\Lib\site-packages\ ...

  3. css常用字体

    宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaHei 微软正黑体 Microsoft JhengHei 新宋体 NSimSun 新细明体 PMingLiU 细明体 Ming ...

  4. 国内访问Google的方法(Google学术、Google香港、Twitter等)

    通过修改host文件达到访问Google等国外网址的目的 打开下面网址,里面会定期更新host文件,而且有详细的方法 https://laod.cn/hosts/2017-google-hosts.h ...

  5. opencv小问题大智慧

    opencv易错点记录 1. 判断条件不应使用CV_ASSERT(),而使用CV_Assert(). 2.  用下面这个自适应阈值必须进行数据的转换,不能直接传入数据!不然程序一直崩溃,找了很久才发现 ...

  6. [Flutter] 支持描边效果的Text

    新版的flutter已经自带这个功能了.TextSyle 中一个shadow . 目前flutter中没找到很好的办法给Text增加描边.自己扩展了一个TextEx,可以实现简单的描边效果,能满足大部 ...

  7. 0_Simple__simpleOccupancy

    计算核函数调用使得占用率,并尝试使用 runtime 函数自动优化线程块尺寸,以便提高占用率. ▶ 源代码. #include <iostream> #include "cuda ...

  8. hive 上篇

    hive 是以hadoop为基础的数据仓库,使用HQL查询存放在HDFS上面的数据,HSQL是一种类SQL的语句,最终会被编译成map/reduce,HSQL可以查询HDFS上面的数据:不支持记录级别 ...

  9. chrome浏览器控制台 console不打印信息问题解决办法。

    转自:https://blog.csdn.net/wang17866603359/article/details/79083776 最近换了安装chrome,想按F12调试下代码,发现控制台什么信息都 ...

  10. IdUDPServer 收到4次重复的数据

    IdUDPServer1->Send(RemoteIP, LabeledEdit2->Text.ToInt(), InText, IndyTextEncoding_UTF8()); 我发给 ...