今天是系列的终结篇,当然要分享一下wcf的托管方面的知识。

wcf中托管服务一般有一下四种:

Console寄宿:             利于开发调试,但不是生产环境中的最佳实践。

winform寄宿:             方便与用户进行交互,用户想开就开,想关就关,但如果机器重启了,不得不自己手动开一下,危险+麻烦。

IIS寄宿:                    此寄宿在实战项目中得到了广泛的应用。

好处有:随系统启动和停止。

iis有大量的管理策略对其进行管理。

即想利用wcf的功能,还想访问asp.net的功能。

Window Service 寄宿: 这个寄宿在实战中也是广泛运用的,同时也是随系统开启或者停止。

好了,前两种寄宿相信大家都会,在这里我就不介绍了,我主要介绍后两种寄宿。

IIS寄宿:  首先要知道寄宿于iis的3个条件:  应用程序域(相当于serviceHost)+svc文件+config的配置节

很感谢vs模板,里面已经包含用于寄宿于iis的模板,ok,上图:

下面的流程就是:

点击确定 ——>  鼠标右击wcf服务项目——>点击“发布”——>在“发布方法”中选择“文件部署”——>在"目标位置”选择“保存位置”——>点击“发布”按钮

然后我们打开本地的IIS,新建网站,修改端口为1111,然后点击确定按钮,截图如下:

前面我们已经说过寄宿在iis中的三个条件,

首先看“应用程序域”:默认新建的网站在应用程序域中的.net framework的版本是2.0,

所以我们必须修改为4.0版本。

截图如下:

然后我们看一下"svc文件": iis寄宿有一个特点就是不用指定endpoint中的是address,因为svc文件的地址就是“endpoint”的地址,

也就是说如果我想预览则需要在url中输入此文件地址。

然后我们看一下” http://localhost:1111/Service1.svc?wsdl"里面的元数据,发现binding是“basicHttpBinding”,也就是说如果

想改变这个低端的binding,就必须修改三个条件中的最后的一个。

截图如下:

最后看一下“config文件”,模板给我们生成的文件代码如下:

 1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3  4   <system.web> 5     <compilation debug="true" targetFramework="4.0" /> 6   </system.web> 7   <system.serviceModel> 8     <behaviors> 9       <serviceBehaviors>10         <behavior>11           <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->12           <serviceMetadata httpGetEnabled="true"/>13           <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->14           <serviceDebug includeExceptionDetailInFaults="false"/>15         </behavior>16       </serviceBehaviors>17     </behaviors>18     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />19   </system.serviceModel>20  <system.webServer>21     <modules runAllManagedModulesForAllRequests="true"/>22   </system.webServer>23   24 </configuration>

也就是说啥也没有,要把binding改成wsHttpBinding,增加终结点即可:

 1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3  4   <system.web> 5     <compilation debug="true" targetFramework="4.0" /> 6   </system.web> 7   <system.serviceModel> 8     <services> 9       <service name="WcfService1.Service1">10         <endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1"></endpoint>11       </service>12     </services>13     <behaviors>14       <serviceBehaviors>15         <behavior>16           <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->17           <serviceMetadata httpGetEnabled="true"/>18           <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->19           <serviceDebug includeExceptionDetailInFaults="false"/>20         </behavior>21       </serviceBehaviors>22     </behaviors>23     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />24   </system.serviceModel>25   <system.webServer>26     <modules runAllManagedModulesForAllRequests="true"/>27   </system.webServer>28 29 </configuration>

最后就是客户端调用:

window server寄宿:

要实现window server寄宿,也很感谢vs给我们提供了“window 服务”模板。

步骤如下:  “文件”->“新建“—>“项目”->"wcf服务库"模板—>“点击确定”—>右键服务库项目添加“新建项”—>找到"window服务"—>"点击添加"。

为了方便我们将“WcfServiceLibrary1”改成Console应用程序,然后新建一个Main入口。

然后我们点击上面的“单击此处切换到代码视图”按钮,进入到代码视图,

然后我们就可以在里面的"OnStart"和“OnStop”方法中添加代码。

 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Diagnostics; 6 using System.Linq; 7 using System.ServiceProcess; 8 using System.Text; 9 using System.ServiceModel;10 11 namespace WcfServiceLibrary112 {13     partial class Service2 : ServiceBase14     {15         public Service2()16         {17             InitializeComponent();18         }19 20         ServiceHost host;21 22         protected override void OnStart(string[] args)23         {24             // TODO: 在此处添加代码以启动服务。25             host = new ServiceHost(typeof(Service1));26 27             host.Open();28         }29 30         protected override void OnStop()31         {32             // TODO: 在此处添加代码以执行停止服务所需的关闭操作。33             host.Close();34         }35     }36 }

然后我们在“设计界面” 点击右键,找到”添加安装程序“,点击即可。

添加完成后会出现”servceProcessInstaller1"和“servcieInstaller1”的组件。

右击“serviceProcessInstaller1”,打开属性窗口,修改Account为LocalSystem;

然后 右击“servcieInstaller1”组件,打开属性窗口

修改ServcieName为:MYServiceHost,也就是定义我的服务名。

修改StartType为:Automatic。

最后一步就是将exe注册到window server中:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.ServiceProcess; 6  7 namespace WcfServiceLibrary1 8 { 9    public class Program10     {11         public static void Main()12         {13             ServiceBase.Run(new Service2());14         }15     }16 }

好了,现在我们可以编译项目准备安装部署了,vs给我们提供了一个InstallUtil.exe工具,

这个工具也就是真正的把我们的exe程序送到window server中。

打开cmd,要做的两件事情就是正确的找到“InstallUtil.exe“ 和我们的”WcfServiceLibrary1.exe“

ok,安装完成,现在做的就是测试工作。

看, 快看,我找到了我的window server 服务。

开启一下服务,然后预览一下wcf的address,看看是否真的启动了。

哈哈,真的可以了,window service 寄宿大功告成。

至此,wcf5天速成系列也就圆满结束了,最后感谢一下一直关注本系列的朋友。祝你们wcf学习更上一层楼。

wcf系列学习5天速成——第五天 服务托管相关推荐

  1. wcf系列学习5天速成——第四天 wcf之分布式架构(转载)

    今天是wcf系列的第四天,也该出手压轴戏了.嗯,现在的大型架构,都是神马的, nginx鸡群,iis鸡群,wcf鸡群,DB鸡群,由一个人作战变成了群殴....... 今天我就分享下wcf鸡群,高性能架 ...

  2. WCF宿主与服务托管

    WCF宿主与服务托管 若要公开WCF服务,需要提供一个运行服务的宿主环境.就像.NET CLR需要创建宿主环境以托管代码一般,WCF的宿主环境同样运行在进程的应用程序域中.在应用程序域中可以创建一个或 ...

  3. WCF开发实战系列四:使用Windows服务发布WCF服务

    WCF开发实战系列四:使用Windows服务发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇文章中我们通过编写的控制台程序或WinForm程序来为本 ...

  4. 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承...

    当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解.其中很大一部分人甚至认为面向服务将是面向对象的终结,现在的面向对象将会被面向服务完全代替. ...

  5. WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模拟程序)...

    WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模拟程序) 原文:WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模 ...

  6. (Nacos源码解析五)Nacos服务事件变动源码解析

    Nacos源码解析系列目录 Nacos 源码编译运行 (Nacos源码解析一)Nacos 注册实例源码解析 (Nacos源码解析二)Nacos 服务发现源码解析 (Nacos源码解析三)Nacos 心 ...

  7. 网络云存储技术Windows server 2012 (项目十五 存储服务间的数据同步)

    网络云存储技术Windows server 2012 (项目十五 存储服务间的数据同步) 目录 前言 一.项目背景 二. 项目实训题 前言 网络存储技术,是以互联网为载体实现数据的传输与存储,它采用面 ...

  8. [老老实实学WCF] 第三篇 在IIS中寄存服务

    老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...

  9. WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[WS标准篇]

    元数据实际上是服务终结点的描述,终结点由地址(Address).绑定(Binding)和契约(Contract)经典的ABC三要素组成.认真阅读过<WCF技术剖析(卷1)>的读者相对会对这 ...

最新文章

  1. mysql数据库最大性能_数据库Mysql性能优化
  2. 【连载】高效人士的116个IT秘诀(第2版)——秘诀24为你的时间建一个构造图
  3. 35+的大龄程序员都去哪里了?
  4. leetcode算法题--奇偶链表
  5. php退出登录后不能再登录了,php怎么实现退出登录功能?
  6. hive map格式转换为字符串_Hive与MySQL的不同之处之类型转换cast和covert函数
  7. 聊一聊SpringCloudNetflix的五大组件(神兽)
  8. Android内存优化(二):一分钟发现内存泄漏
  9. GCC,GDB,Makefile
  10. WCF Ria Service“操作失败,指定的命名链接在配置中找不到”错误解决方法
  11. python学习笔记之读取配置文件【转自https://my.oschina.net/u/3041656/blog/793467】
  12. [CodeForces 372A] Counting Kangaroos is Fun
  13. 【树上分块】【dfs序】2018沈阳网络赛 —— J题
  14. 我的AI之路(52)--如何制作自己的UCF101数据集
  15. 三对角阵的一维数组表示
  16. 前沿计算技术于推动设计技术发展
  17. Node+Mysql增删改查obj-to-sql,多条件查询
  18. asp.net网站负载测试
  19. 为什么现代物理学离不开量子论和相对论?
  20. android实现打电话

热门文章

  1. tensorflow学习(5.实际图片的读取以及lenet-5的搭建)
  2. 【技术综述】万字长文详解Faster RCNN源代码
  3. 【CV秋季划】人脸识别经典难题介绍,抗遮挡,跨年龄,异质源,少样本等
  4. 【AI白身境】学AI必备的python基础
  5. 中国煤炭工业节能减排现状研究分析及市场前景预测报告2022-2028年版
  6. 中国电子用LCP树脂市场未来发展展望及十四五规划咨询建议报告2022-2028年版
  7. 东平县农民丰收节-农业大健康·万祥军:功能性谋定生态品牌
  8. openresty开发系列16--lua中的控制结构if-else/repeat/for/while
  9. 移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析html代码,更好地将移动web前端页面表现出来。本文整理一些常用的meta标签...
  10. [HDU] 2612 Find a way - 用单源最短论经模拟的简单广搜