WCF服务开发与调用的完整示例
WCF服务开发与调用的完整示例
开发工具:VS2008
开发语言:C#
开发内容:简单的权限管理系统
第一步、建立WCF服务库

点击确定,将建立一个WCF 服务库示例程序,自动生成一个包括IService1.cs和Service1.cs两个类文件。我们可以直接对其修改开发我们的服务,但一般直接删除。
第二步:开发实体类
在解决方案中,添加新类Module.cs
在类中要首先引入using System.Runtime.Serialization命名空间
实体类具体代码如下:
namespace WcfServiceLib.model
{
/// <summary>
/// 模块实体
/// </summary>
[DataContract]
class Module
{
[DataMember]
public string ModuleNO;
[DataMember]
public string ModuleName;
}
}
为使在WCF服务被调用过程中科被序列化,在实体类前加[DataContract]标签,实体类每个成员前加[DataMember]标签
第三步:创建WCF服务接口
WCF服务要对外提供服务,需要创建服务的接口,声明对外服务的内容。
在解决方案中添加新的接口类imoduleservice.cs,然后引入名门空间using System.ServiceModel;
具体代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using WcfServiceLib.model;
namespace WcfServiceLib.iservice
{
/// <summary>
/// 接口类
/// </summary>
[ServiceContract]
public interface imoduleservice
{
[OperationContract]
void AddModules(Module book);
[OperationContract]
Module GetModuleByID(string id);
[OperationContract]
void RemoveModule(string id);
[OperationContract]
void ModuleUpdate(Module book);
}
}
接口类前要加[ServiceContract]标签,每个成员前要加[OperationContract]标签,标签的作用是保证外部调用可以访问到该方法。
第四步:接口类的实现
实现第三步中声明的接口类,只有这样WCF服务才会正在提供服务。
在解决方案中添加接口实现类moduleservice,引入名称空间using System.ServiceModel;
具体代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WcfServiceLib.iservice;
using System.ServiceModel;
using WcfServiceLib.model;
namespace WcfServiceLib.service
{
/// <summary>
/// 接口类实现
/// </summary>
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
class moduleservice : imoduleservice
{
#region imoduleservice 成员
List<Module> _Modules = new List<Module>();
public void AddModules(Module m)
{
m.ModuleNO = Guid.NewGuid().ToString();
_Modules.Add(m);
}
public Module GetModuleByID(string id)
{
Module m = _Modules.Find(p => p.ModuleNO == id);
return m;
}
public void RemoveModule(string id)
{
Module m = _Modules.Find(p => p.ModuleNO == id);
_Modules.Remove(m);
}
public void ModuleUpdate(Module module)
{
Module m = _Modules.Find(p => p.ModuleNO == module.ModuleNO);
m.ModuleName = module.ModuleName;
}
#endregion
}
}
到此为止,WCF服务的主体就开发完成了,那么如何才可以让调用者使用这个服务呢?我们就需要吧WCF服务注册并发布一下。
第五步:WCF服务发布
在VS2008以上的版本中都提供了对WCF服务可视化注册和发布的工具。

出现如下界面:

可以看到有两个终结点,第一个是服务节点,第二个是元数据节点。由于我们是用VS自带的服务库项目来创建的,配置文件中还没有删除这些信息,所以第一个节点里还保留着自带的服务信息Iservice.下面我们把这个服务更改为我们上文编写的服务的信息。
单击左侧的“Services”-“Services.Service1”在右侧的Name,弹出“服务类型浏览器”对话框,在此类型中我们找到此WCF服务项目编译出来的dll文件,双击它就可以出现此服务中的对外公布的服务,点击选中它单击确定。

然后,我们展开左侧“Services”->“WcfServiceLib.service.moduleservice”->“Endpoints”,单击第一个“Empty Name”,从右边的“EmptyProperties”中的Contract中我们可以看到,这里的Contract仍然用的是Services.IService1。按照上文的步骤在走一遍,找到DLL后确定。
最后关闭配置窗口,保存。

到此为止,服务就开发并发布完成了。接下来我们将WCF进行托管后就可以使用了。WCF服务托管有三种方式,最常用的是IIS托管。我们看一下WCF服务是如何进行IIS托管的。
第六步:WCF服务IIS发布
1、在解决方案上右键添加网站,类型选择WCF服务。

2、建立起来的新的WCF服务站点中在App_Code文件中自动为我们生成两个类文件:IService.cs和Service.cs。这两个文件对我们来说没有用,我们删掉。
3、然后添加对WCF服务库项目的引用。结果如下:

4、然后修改Service.svc文件,代码如下:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLib.service.moduleservice" %>
5、在web.config上右击选择“编辑WCF配置”。



关闭WCF编辑工具,保存即完成了服务的发布配置。
6、在Service.svc上右击,选择“在浏览器中查看”,在IE中运行此服务。

7、在IIS中部署站点,建立虚拟目录指向该站点。然后浏览界面如下。

到此,WCF服务在IIS中托管成功。接下来,我们看一下如何使用WCF服务。
第七步:WCF服务的使用
1、新建Asp.net应用程序

2、右键点击“引用”--->添加服务引用

添加成功后,解决方案中文件如下:

3、后台调用WCF服务,代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ServiceReference1.imoduleserviceClient c = new WCF_Cilent.ServiceReference1.imoduleserviceClient();
c.AddModules(new WCF_Cilent.ServiceReference1.Module());
if (c.GetAllModule().Length > 0)
{
Response.Write(c.GetAllModule()[0].ModuleNO.ToString());
Response.End();
}
}
4、运行程序,出现如下调用结果,调用成功。

WCF服务开发与调用的完整示例的更多相关文章
- Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...
- 创建一个简单的WCF程序2——手动开启/关闭WCF服务与动态调用WCF地址
一.创建WCF服务器 1.创建WCF服务器的窗体应用程序 打开VS2010,选择文件→新建→项目菜单项,在打开的新建项目对话框中,依次选择Visual C#→Windows→Windows窗体应用程序 ...
- WCF服务客户端首页调用慢的问题处理
场景: WCF服务架设于IIS服务中,走TCP协议.客户端首次调用特别慢,第一次加载完后,都正常. 解决: 把服务中需要序列化的模型所在的工程 > 属性 > 生成 > 生成序列化程序 ...
- 通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 短信服务:通知类和验证码短信,全国三网合一通道,5秒内到达,费用低 ...
- 出行服务类API调用的代码示例合集:长途汽车查询、车型大全、火车票查询等
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 长途汽车查询:全国主要城市的长途汽车时刻查询,汽车站查询 车型大全 ...
- SharePoint 2013 调用WCF服务简单示例
内容比较简单,主要记录自己使用SharePoint 2013WCF服务遇到的小问题和小经验,分享给大家,希望能够给需要的人有所帮助.好吧,进入正题! 第一部分 SharePoint 2013调用自带W ...
- C# 调用WCF服务的两种方法
项目简介 之前领导布置一个做单点登录的功能给我,实际上就是医院想做一个统一的平台来实现在这个统一的平台登录后不需要在His.Emr.Lis等系统一个个登录,直接可以登录到对应的系统,然后进行相应的操作 ...
- WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转)
WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转) Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信 ...
- 关于WCF报错之调用方未由服务器进行身份验证
在我们部署好WCF服务以后,调用WCF服务会出现”调用方未由服务器进行身份验证”的错误.这个错误是怎么造成的呢? 通常我们在创建WCF后,用本机调试,一切正常,没有任何问题.其实用本机测试的时候,服务 ...
随机推荐
- InnoDB Spin rounds per wait在>32位机器上可能为负
今天发现一个系统innodb的spin rounds per wait为负,感觉很奇怪,原来是个bug: For example (output from PS but we have no patc ...
- tomcat部署https
在server.xml配置文件中增加证书位置跟密码: <Connector port="443" protocol="org.apache.coyote.http1 ...
- Android-Universal-Image-Loader的缓存处理机制
讲到缓存,平时流水线上的码农一定觉得这是一个高大上的东西.看过网上各种讲缓存原理的文章,总感觉那些文章讲的就是玩具,能用吗?这次我将带你一起看过UIL这个国内外大牛都追捧的图片缓存类库的缓存处理机制. ...
- python学习笔记七 初识socket(进阶篇)
socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- hdu1242 优先队列+bfs
Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 用excel做差异表达
首先准备数据:表达矩阵 ACC.uncv2.mRNAseq_RSEM_normalized_log2.txt(以下载的TCGA的数据,log之后的) 上面数据中01为tumor,11为normal 我 ...
- IOS开发数据库篇—SQLite模糊查询
IOS开发数据库篇—SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: // // YYPerson.h // 03- ...
- 高宽不定的div相对父div上下、左右居中
<div class="parent"> <div class="child">123</div> </div> ...
- 《BI那点儿事》数据流转换——百分比抽样、行抽样
百分比抽样和行抽样可以从数据源中随机选择一组数据.这两种task都可以产生两组输出,一组是随机选择的,另一组是没有被选择的.可以将这些选择出的数据发送到开发或者测试服务器上.这个Task的最合适的应用 ...
- 焦点问题onfocus=”this.blur()”代替方法(转)
为了去除链接的虚线框,网上搜索到最常见的方法是onfocus=“this.blur()”,不过同时搜索到的是这会不利于盲人浏览使用页面 在淘宝ued官方博客上详细说明了解决方法,这里转了部分,完整版: ...