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

今天是系列的终结篇,当然要分享一下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文件”,模板给我们生成的文件代码如下:

    

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

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

     

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="WcfService1.Service1">
        <endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1"></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

 

  最后就是客户端调用:

 

 

window server寄宿:

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

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

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

    

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

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.ServiceModel;

namespace WcfServiceLibrary1
{
    partial class Service2 : ServiceBase
    {
        public Service2()
        {
            InitializeComponent();
        }

        ServiceHost host;

        protected override void OnStart(string[] args)
        {
            // TODO: 在此处添加代码以启动服务。
            host = new ServiceHost(typeof(Service1));

            host.Open();
        }

        protected override void OnStop()
        {
            // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
            host.Close();
        }
    }
}

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

 

 

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

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

   

 

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

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

        修改StartType为:Automatic。

        

 

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceProcess;

namespace WcfServiceLibrary1
{
   public class Program
    {
        public static void Main()
        {
            ServiceBase.Run(new Service2());
        }
    }
}

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

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

 

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

 

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

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

 

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

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

时间: 2024-10-17 10:23:29

wcf系列学习5天速成——第五天 服务托管的相关文章

wcf系列学习5天速成——第三天 事务的使用

今天是速成的第三天,再分享一下WCF中比较常用的一种技术,也就是"事务".   在B2B的项目中,一般用户注册后,就有一个属于自己的店铺,此时,我们就要插入两张表, User和Shop表. 当然,要么插入成功,要么全失败.   第一步: 首先看一下项目的结构图:   第二步: 准备工作,我们新建Commerce数据库,用EF去映射,然后新建ServiceWCF类库,具体步骤就省略,             这一块不懂可以留言.   第三步:新建一个Model类库.建立两个实体类Shop

wcf系列学习5天速成——第四天 wcf之分布式架构

今天是wcf系列的第四天,也该出手压轴戏了.嗯,现在的大型架构,都是神马的, nginx鸡群,iis鸡群,wcf鸡群,DB鸡群,由一个人作战变成了群殴.......   今天我就分享下wcf鸡群,高性能架构中一种常用的手法就是在内存中维护一个叫做"索引"的内存数据库, 在实战中利用"索引"这个概念做出"海量数据"的秒杀. 好,先上图:   这个图明白人都能看得懂吧.因为我的系列偏重于wcf,所以我重点说下"心跳检测"的实战手法

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

当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解.其中很大一部分人甚至认为面向服务将是面向对象的终结,现在的面向对象将会被面向服务完全代替.在开始本Blog之前,我先来谈谈我对SOA和OO的区别,首先申明,这只是一家之言,欢迎大家批评指正,并且关于SO的谈论不是本Blog的主题,只是主题的引子,在这里只是简单讨论而已 . OO和SO之间具有共同的部分,在运用的领域上存在交集,只有在基于他们交集层面上谈论谁是谁非才有意义,下面是我对SO和

搜旅团推出五心服务售后服务体系再升级

尽管团购网站还算是个新生儿,从今年1月成功落地中国到现在不过大半年的时间,但是其发展速度却可用神速来形容,如今已呈现出"千团大战"的竞争态势.然而,面对如此众多的同质化消费选择,消费者在哪家团购网站消费似乎都差不了多少.也就是说,对于团购网站而言,用户粘性很难保障,陷入了模式雷同,差异化产品.个性化服务乏力的窘况. 与此同时,团购网站售后服务体系的弊端也频现,屡遭消费者投诉.从消费者反映的情况来看,团购网站夸大宣传,难以实现服务位列前茅,更有甚者搞诈骗行为,比如以低廉的价格为诱饵吸引购

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

原文:[老老实实学WCF] 第三篇 在IIS中寄存服务 老老实实学WCF 第三篇 在IIS中寄宿服务   通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我们对WCF的编程生命周期有了一个最基本的了解.   在前两篇中演示的例子,一定要力求背着做下来,包括源程序.配置文件都要背着一行行的手写下来,这样才能有深刻的体会.WCF的知识零散复杂,必须扎扎实实的学习和练习.如果你还没有做到了然于胸,现

c#-wcf 状态不对,我明明没有运行服务端,但是client的状态显示是opened

问题描述 wcf 状态不对,我明明没有运行服务端,但是client的状态显示是opened 我明明没有运行服务端的,但是client的状态却是opened. 解决方案 你的服务端是不是在iis express中运行没有关闭,或者你的端点地址不是你部署的服务器,这个要调试了才知道.你给的信息太少! 解决方案二: 我的wcf服务是采用的winform寄宿,确实没有运行服务端,这真的是很奇怪的问题. 解决方案三: 这里是源代码:github

189.cn宽带“五心”服务:自助检测超省心

硅谷网讯 互联网时代,我们每个人的生活都与网络息息相关,现在大部分人每天上班,第一件事就是打开电脑,通过宽带上网查收邮件,开始一天的工作;下班回到家,打开电脑网购.追美剧.看视频.玩游戏... ...根据个人喜好,自由选择不同的http://www.aliyun.com/zixun/aggregation/18418.html">网络生活模式. 毫无疑问,网络为人们搭建起与世界沟通的桥梁,也以超乎想象地发展改变着整个世界的格局.然而,宽带网络在为人们的生活提供便捷与无限可能的时候,偶尔也会

MSN切断古巴朝鲜等五国服务

北美东部时间5月30日中午消息,微软公司主动切断了古巴.朝鲜.叙利亚.伊朗和苏丹等五国服务.据拉美在线.古巴新闻等拉丁美洲媒体报道,古巴发表了一篇题为<被围困的古巴互联网>的报告,称巨型软件公司提供的MSNMessenger服务,已经暂停接通古巴和其他美国的"国家 敌人",包括伊朗,朝鲜,叙利亚和苏丹.这一行为是依照美国的相关立法执行的.网络上流传着微软的声明,称微软公司之 所以切断古巴等五国的 服务器端口,是为遵守美国政府制裁措施中关于禁止向被制裁国提供或出口软件的规定,

WCF技术剖析之二十五:元数据(Metadata)架构体系全景展现[元数据描述篇]

在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy.WS-Transfer和WSDL,因为WCF元数据结构体系完全是基于WS-MEX等相关的规范之上.熟悉这些基本的WS规范,对于我们全面.深刻的理解WCF整个元数据架构体系具有十分重要的意义.不仅仅是针对元数据,对于后续章节陆续要介绍的内容,比如事务.可靠会话.安全等,我强烈建议读者在正式进行相关部分的学习之前,先对相关的WS规范作一个大致的了解. 通过对WS-MEX的介绍,我们知道:不论是采用WS-T