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. Hibernate JavaBean.hbm.xml配置

    主键生成策略: hibernate中必须设置主键 <generator> 由数据库维护: identity:用于自动生成主键方式(没有自增主键的数据库不使用eg:oracle) seque ...

  2. unicode 转码 ansi

    #include "stdafx.h"#include <Windows.h>#include <stdio.h> HRESULT SomeCOMFunct ...

  3. Elasticsearch 全文搜索和keyword search字段的mapping定义

    在ES5.0之前我们对于需要keyword search的字段都是这样定义的: { "field name":{ "type": "string&qu ...

  4. [Mysql]查看版本号的五种方式

    [Mysql]查看版本号的五种方式   目录(?)[+]   查看版本信息 #1 使用命令行模式进入mysql会看到最开始的提示符 Your MySQL connection id is 3Serve ...

  5. [Python] 牛顿插值

    插值公式为: 差商递归公式为: # -*- coding: utf-8 -*- #Program 0.4 Newton Interpolation import numpy as np import ...

  6. 修改oracle数据库默认时间格式

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ccchencheng.blog.51cto.com/2419062/929695 ...

  7. uva-10129-欧拉通路

    题意:每一个单词的长度最小2,最大1000,单词开头的字母和另外一个单词的末尾一样就可以连接起来,解所有的单词是不是都可以连接起来,没有遗漏的 把每一个单词的第一个字母当成一个结点,最后一个单词也作为 ...

  8. UVA127

    模拟游戏,规则如下把卡牌一张接一张,从左到右依次摊开,不可以重叠,每当某张卡片和左边(左边第三张)卡片匹配,它就能放到另外一张卡片上,匹配的规则是他们有一样的级别或者花色,在每次移动完成以后,还需要再 ...

  9. UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 263: i llegal multibyte sequence

    UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 263: illegal multibyte seq ...

  10. 31. Next Permutation + 46. Permutations + 47. Permutations II + 60. Permutation Sequence

    ▶ 问题:字典序生成有关的问题. ▶ 31. 由当前序列生成字典序里的下一个序列. ● 初版代码,19 ms class Solution { public: void nextPermutation ...