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. Spring Security编程模型

    1.采用spring进行权限控制 url权限控制 method权限控制 实现:aop或者拦截器(本质就是之前之后进行控制)--------------------proxy就是 2.权限模型: 本质理 ...

  2. png-CRC32校验

    官方文档: https://www.w3.org/TR/PNG-CRCAppendix.html CRC32校验的数据,看原文 A four-byte CRC (Cyclic Redundancy C ...

  3. PHP大小写是否敏感问题的汇总

      一.大小写敏感1. 变量名区分大小写view sourceprint?     <?php    $abc = 'abcd';    echo $abc; //输出 'abcd'     e ...

  4. leetcode504

    public class Solution { public string ConvertToBase7(int num) { ? "" : "-"; var ...

  5. XE6 HTML设计器

    XE6 自带的HTML编辑器很好用 File>New>Other>Web Documents>HTML Page 自动有code和Design,在Design标签可以拖放控件 ...

  6. Java 8 日期时间API

    Java 8一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期; 在介绍本篇文章内容之前,我们先来讨论Jav ...

  7. UI5-文档-4.6-Modules

    在SAPUI5中,资源通常被称为模块.在这一步中,我们将上次练习中的警报替换为sap.m库中的适当消息Toast.所需的模块可以异步加载. Preview A message toast displa ...

  8. Qt 的事件

    一个事件由一个特定的QEvent子类来表示,如QMouseEvent.QKeyEvent 处理一个事件的方法: 方法一:重新实现部件的paintEvent.mousePressEvent等事件处理函数 ...

  9. tensorflow Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 错误

    Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 在使用tensorflow自带的数据集做手写数字识别的时候 ...

  10. Python Spider 抓取今日头条街拍美图

    """ 抓取今日头条街拍美图 """ import os import time import requests from hashlib ...