WCF服务开发与调用的完整示例
第一步、建立WCF服务库
点击确定,将建立一个WCF 服务库示例程序,自动生成一个包括IService1.cs和Service1.cs两个类文件。我们可以直接对其修改开发我们的服务,但一般直接删除。
第二步:开发实体类
在解决方案中,添加新类Module.cs
在类中要首先引入using System.Runtime.Serialization命名空间
实体类具体代码如下:
1 namespace WcfServiceLib.model 2 { 3 4 /// <summary> 5 6 /// 模块实体 7 8 /// </summary> 9 10 [DataContract] 11 12 class Module 13 14 { 15 [DataMember] 16 public string ModuleNO; 17 [DataMember] 18 public string ModuleName; 19 } 20 }
为使在WCF服务被调用过程中科被序列化,在实体类前加[DataContract]标签,实体类每个成员前加[DataMember]标签
第三步:创建WCF服务接口
WCF服务要对外提供服务,需要创建服务的接口,声明对外服务的内容。
在解决方案中添加新的接口类imoduleservice.cs,然后引入名门空间using System.ServiceModel;
具体代码如下:
1 using System;2 using System.Collections.Generic;3 using System.Linq; using System.Text;4 using System.ServiceModel;5 using WcfServiceLib.model;6 7 namespace WcfServiceLib.iservice {8 /// <summary>9 /// 接口类 10 /// </summary> 11 [ServiceContract] 12 public interface imoduleservice 13 { 14 [OperationContract] 15 void AddModules(Module book); 16 17 [OperationContract] 18 Module GetModuleByID(string id); 19 20 [OperationContract] 21 void RemoveModule(string id); 22 23 [OperationContract] 24 void ModuleUpdate(Module book); 25 } 26 }
WcfServiceLib.iservice
接口类前要加[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 } }
WcfServiceLib.model
到此为止,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服务,代码如下:
1 protected void Page_Load(object sender, EventArgs e) 2 { 3 if (!IsPostBack) 4 { 5 ServiceReference1.imoduleserviceClient c = new WCF_Cilent.ServiceReference1.imoduleserviceClient(); 6 c.AddModules(new WCF_Cilent.ServiceReference1.Module()); 7 8 if (c.GetAllModule().Length > 0) 9 { 10 Response.Write(c.GetAllModule()[0].ModuleNO.ToString()); 11 Response.End(); 12 } 13 } 14 }
4、运行程序,出现如下调用结果,调用成功。
转载于:https://www.cnblogs.com/powerzhang/p/3174822.html
WCF服务开发与调用的完整示例相关推荐
- VB.NET工作笔记008---vs2017创建使用WCF服务_并调用服务demo
技术交流QQ群[JAVA,.NET,BigData,AI]:170933152 声明,找的例子,之前没有做过wcf,但是看了看例子感觉挺简单的,记一下吧 WCF的全称是Windows Communic ...
- 【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )
文章目录 I . Lambda 表达式 简介 II . Lambda 表达式语法 III . Lambda 表达式类型 IV . Lambda 表达式返回值 V . Lambda 表达式调用 VI . ...
- Android开发java调用C简单示例
目录 下载NDK和CMake 新建NDK项目 写入C++代码,并运行 本文使用的Android Studio版本是windows版Android Studio Bumblebee | 2021.1.1 ...
- SharePoint 2013 调用WCF服务简单示例
内容比较简单,主要记录自己使用SharePoint 2013WCF服务遇到的小问题和小经验,分享给大家,希望能够给需要的人有所帮助.好吧,进入正题! 第一部分 SharePoint 2013调用自带W ...
- WCF中常见的几种Host,承载WCF服务的方法详解
1:写在前面 我们都知道WCF在运行的时候必须自己提供宿主来承载服务.WCF 本身没有附带宿主,而是提供了一个 ServiceHost 的类,该类允许您在自己的应用程序中host WCF 服务.然后调 ...
- 部署承载于 Internet 信息服务中的 WCF 服务
部署承载于 Internet 信息服务中的 WCF 服务 开发和部署承载于 Internet 信息服务 (IIS) 中的 Windows Communication Foundation (WCF) ...
- WCF中常见的几种Host,承载WCF服务的方法
1:写在前面 我们都知道WCF在运行的时候必须自己提供宿主来承载服务.WCF 本身没有附带宿主,而是提供了一个 ServiceHost 的类,该类允许您在自己的应用程序中host WCF 服务.然后调 ...
- java调用wcf_详解JAVA调用WCF服务的示例代码
这一篇将要解决java中调用WCF的问题,使用的依旧是上一篇中托管在IIS中的WCF服务,本来我是打算用axis来写这篇文章的,可就在我开始之前,无意中发现了在java包中自带的wsimport工具 ...
- WCF分布式开发常见错误(3):客户端调用服务出错
我们手动编码使用客户端调用WCF服务的时候会出现服务不支持 .Net Framing的错误, 具体信息如下: You have tried to create a channel to a servi ...
最新文章
- request.form()和request()和request.data的区别
- new操作符具体干了啥
- 基于SSL的mysql(MariaDB)主从复制
- 那些年,程序员读错的英语
- 芋道 Spring Boot 自动配置原理
- 第六十九期:【学习分享】温水里的程序员,技术将成为温水
- Android中关于Volley的使用(四)利用NetworkImageView来加载图片
- 多个apple苹果设备(iphone,mac,pad,icloud)之间同步数据
- (17)DialogBox和DialogBoxParam函数
- RealSense D435i深度相机介绍
- 图像处理(一)bicubic解释推导
- oracle中算百分比,Oracle百分比分析函数RATIO_TO_REPORT() OVER()实例详解
- [转]破解无线路由器密码
- IDEA中Debugger的使用
- 判断听云是否正常嵌入及注意事项
- 怎么给领导做项目汇报
- Flutter 实现风车加载动画组件
- python爬取酷狗音乐_Python爬取酷狗音乐
- [译] APT分析报告:01.Linux系统下针对性的APT攻击概述
- 速途网范锋:重要合作可能决定网络企业生死
热门文章
- VigiBase中搜索和眼病相关的统计数据
- intellij中导入外部的依赖包+在当前的工程中使用
- 哑编码官方代码自己的注解
- ubuntu搜狗输入法突然无法使用(新解)
- OpenCV学习笔记五-图像混合
- 机器学习:正则化原理总结
- C/C++编程心得(三)
- 【数学基础】概率论——p(x|\theta)和p(x;\theta)的区别
- java获取服务器信息返回前端,java程序获取linux服务器进程信息
- 如何使用matlab得出pid控制参数值,基于MATLAB的PID控制器参数整定及仿真