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 ? : 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的例子的更多相关文章
- 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代码方式来 ... 
- WCF实现事件通知相关应用技巧介绍
		WCF实现事件通知是一个比较容易掌握的知识点,不过在实现的过程中,我们还是需要注意一些事项,以保证功能的完善性. WCF中有一些方法的应用对于初学者来说还是比较容易应用.只要熟练的联系这些方法操作,一 ... 
- WCF 4.0 使用说明
		WCF 4.0开发说明,工具VS2013 ,IIS,使用http协议 打开VS2013,新建项目Visual C#>Web>Asp.NET Web应用程序,添加相关引用: System.S ... 
- 我的WCF摸爬滚打之路(1)
		等了好久终于等到今天!盼了好久终于把梦实现……哈哈,仅以此歌词来庆祝我为期3天的wcf学习之路圆满结束. 今天写这个文章的目的在于记录一下我自己在学习WCF的时候碰到的一些问题,俗话说,好记心不如烂笔 ... 
- .Net remoting, Webservice,WCF,Socket区别
		传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service).比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个"服务& ... 
- 中小研发团队架构实践之生产环境诊断工具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如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ... 
- jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding
		Jquery ajax调用WCF服务 例子效果如下:原界面 点击按钮GetList get后,通过指定的Url获取数据添加到table 新建一个控制台项目,添加IContract.cs,DBServi ... 
- 每天进步一点--WCF学习笔记
		最近买了一本书WCF服务编程,重头再开始了解学习WCF,现将学习记录,以便后来复习,也希望和大家一起进步. WCF用终结点表示一种组成关系,终结点就是地址.契约与绑定的混合品,即 地址(Address ... 
- C#多线程介绍(下)
		转载原文:这里是链接内容 转载原文:这里写链接内容 转载原文:这里写链接内容 (重要事情说三遍) 引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个 ... 
随机推荐
- Spring Security编程模型
			1.采用spring进行权限控制 url权限控制 method权限控制 实现:aop或者拦截器(本质就是之前之后进行控制)--------------------proxy就是 2.权限模型: 本质理 ... 
- png-CRC32校验
			官方文档: https://www.w3.org/TR/PNG-CRCAppendix.html CRC32校验的数据,看原文 A four-byte CRC (Cyclic Redundancy C ... 
- PHP大小写是否敏感问题的汇总
			一.大小写敏感1. 变量名区分大小写view sourceprint? <?php $abc = 'abcd'; echo $abc; //输出 'abcd' e ... 
- leetcode504
			public class Solution { public string ConvertToBase7(int num) { ? "" : "-"; var ... 
- XE6 HTML设计器
			XE6 自带的HTML编辑器很好用 File>New>Other>Web Documents>HTML Page 自动有code和Design,在Design标签可以拖放控件 ... 
- Java 8 日期时间API
			Java 8一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期; 在介绍本篇文章内容之前,我们先来讨论Jav ... 
- UI5-文档-4.6-Modules
			在SAPUI5中,资源通常被称为模块.在这一步中,我们将上次练习中的警报替换为sap.m库中的适当消息Toast.所需的模块可以异步加载. Preview A message toast displa ... 
- Qt 的事件
			一个事件由一个特定的QEvent子类来表示,如QMouseEvent.QKeyEvent 处理一个事件的方法: 方法一:重新实现部件的paintEvent.mousePressEvent等事件处理函数 ... 
- tensorflow Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 错误
			Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 在使用tensorflow自带的数据集做手写数字识别的时候 ... 
- Python Spider 抓取今日头条街拍美图
			""" 抓取今日头条街拍美图 """ import os import time import requests from hashlib ... 
