使用C#创建及调用WCF完整实例 (Windows服务宿主)

关于WCF的概念、原理、优缺点等,在这里就不多说了,网上很多,可以自行搜索,比我解释的要专业的多。

这里直接说使用Windows 服务(Windows Service)作为宿主如何实现,其它方式不在此次教程之内

文章最后有本例的下载连接,包含源代码、说明教程、编译后文件

实例环境:Windows Server 2008 R2 + VS 2010(C#)

打开 VS 2010,选择 新建项目,选择 ”WCF”|”WCF 服务库 ”,注意这里是”WCF 服务库 ”,不是"WCF 服务应用程序"

确定后,系统会自动建立默认文件 ” Service1.cs”和” IService1.cs”,其实也是系统给你的示例

打开"IService1.cs",你可以看到系统给你的示例代码,将光标定位到"IService1"上,按F2健,可将接口重命为你想要的名子,重命名后将解决管理器中文件也同命修改。我修改为 ”IMyFirstService”;打开“Service1.cs",按相同方法修改

回到MyFirstService,在这里我定义了两个函数"Base64Encrypt"和"Base64Decrypt",请注意格式,[OperationContract]一定要有,否则外部无法访问

切换到"MyFirstService",接口实现,编写具体代码。

好了,WCF服务库的代码部分就结束了,下面要开始配置,打开项目下的App.config文件

这里,我们主要看system.servicemodel节点,有2体个子节点"services"和"behaviors",其中"behaviors"节点主要是安全和调试方面的设置,我们不在此讨论,主要说一下第1个子节点"services",我们来看一下"services"节点内

估计大多数人和我一样,这些是什么乱七八糟的东西,头大。既然开头说了,本文只说如何实现,所以不说其所以然了,肯定,这样的配置无法在后面的宿主里成功调用,为什么呢,因为缺少了binding的配置,而默认并未生成配置节点,那好我们自己来加,注意标识的地方

配置一下项目属性,我的生成目录在F:\WCFTEST,生成项目

好的,WCF服务库已工作已结束。

开始宿主程序

右击解决方案,添加|新建项目”Windows”|”Windows 服务”,项目名就默认吧,不改了

在Windows服务项目中添加WCF服务库的引用

打开"WindowsService1"项目的App.config,发现什么都没有

将“MyTestWcfServiceLibrary”项目中的App.config文件的内容全部复制过来(即现在2个项目的App.config文件内容是完全一样的)

开始编写Windows服务的代码,要先添加system.servicemodel引用,并using

添加服务安装程序

配置安装程序

好的,WCF宿主程序也结束了,成生项目

开始编写客户端调用

右击解决方案|添加|新建项目|Windows|windows 窗体应用程序,项目名就默认吧(WindowsFormsApplication1),添加2个label,2个textbox,3个button

右击引用|添加服务引用,服务地址在windows服务项目中App.config文件中,依次展开找到system.serviceModel|services|service|host|baseAddresses|add节点,baseAddress等于号后的双引号中的字符串即为服务地址,注意如果是生产环境,那么你服务所使用的端口号在开启。本例地址为“http://localhost:8732/Design_Time_Addresses/MyTestWcfServiceLibrary/Service1/” 

(下载连接中的教程中此图使用错误,应该是这样的图,教程中使用的是在WindowsService1中的服务引用的图)

此时,服务地址是localhost,所以可以直接引用成功,如果服务地址是一个网络地址,需要在宿主服务器中将服务启动后才可以引用服务,否则会提示找不到服务。也就是说如果你的服务地址是“http://192.168.1.1:8732/Design_Time_Addresses/MyTestWcfServiceLibrary/Service1/”,,那么你要先将服务安装并启动服务,这样才可以添加服务引用

客户端代码

设为启动项目,运行

编码

解码

文中所写的全部在这个下载中(写了这么详细了,如果还没做出来,那就花点钱吧^_^)

http://download.csdn.net/detail/meerio/9215083

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玄魂工作室

[技巧]看我如何通过Weeman+Ettercap拿下路由器管理权限

本文作者:sn0w 原文链接:https://zhuanlan.zhihu.com/p/20871363 本篇文章主要介绍如何在接入无线网络后如何拿到路由器的...

43280
来自专栏阮一峰的网络日志

Linux 守护进程的启动方法

"守护进程"(daemon)就是一直在后台运行的进程(daemon)。 本文介绍如何将一个 Web 应用,启动为守护进程。 ? 一、问题的由来 Web应用写好后...

33750
来自专栏编程

Sublime Text的安装与配置

1.下载Sublime Text安装包,双击安装程序进行安装; 2.安装Package Control,Ctrl+~打开控制台,选择相应版本的代码粘贴(如图所示...

26480
来自专栏编程微刊

微信小程序从零开始开发步骤(六)4种页面跳转的方法

19230
来自专栏铭毅天下

干货 | Elasticsearch 集群健康值红色终极解决方案

题记 Elasticsearch当清理缓存( echo 3 > /proc/sys/vm/drop_caches )的时候,出现 如下集群健康值:red,红...

94280
来自专栏乐沙弥的世界

CentOS 7下 yum方式安装Nginx

Nginx 是一个很强大的高性能Web和反向代理服务器,它具有众多非常优越的特性。诸如低开销,高并发,支持缓存,支持正反向代理,支持负载均衡,支持正则,支持re...

16720
来自专栏草根专栏

使用VS Code开发asp.net core (下)

本文是基于Windows10的. Debugging javascript 打开wwwroot/js/site.js, 写一段简单的js代码: (functio...

35550
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Pydio托管文件共享服务器

随着云的采用增加,越来越多的数据被远程存储。从音乐到图片再到个人文档,很多人都将文件上传到他们不管理的服务器上。如果您希望将文件保存在您控制的服务器上,则可以使...

42400
来自专栏FreeBuf

如何在安卓移动终端进行一次渗透实验?

下面的实验将通过使用一个虚拟Android系统作为实验主体来进行展示。在这个实验中,通过使用虚拟Android系统,模拟移动终端的操作,来帮助我们逐步实现使用一...

36460
来自专栏Golang语言社区

HTTP协议漫谈

简介 园子里已经有不少介绍HTTP的的好文章。对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将H...

375130

扫码关注云+社区

领取腾讯云代金券