学习WCF之路3:在IIS中寄存服务

        前两篇都是控制台应用程序寄存的服务, 这种寄宿方式叫做"自托管",即 WCF服务和应用程序是一体的。这种寄宿方式的优点是只需要最少的框架支持(只需要一个控制台应用程序就可以了,随处建立,随处运行),因此配置和使用都是最简单的,此外通过控制台程序还可以对WCF服务运行中发生的错误进行监视,在开发服务阶段,这种方式能提供调试的便利。

        然而,如果作为最终产品部署,自托管的寄宿方式就不那么合适,应用程序相比框架(IIS、Windows服务等)是不稳定的,WCF与应用程序共享生命周期,应用程序关闭后WCF也会停止。还有许多特性诸如进程回收、空闲关闭等自托管都是不支持的。因此,为了使我们的WCF符合产品级别的要求,应该为其选择一个更稳定、伸缩性更好的宿主。

       我们今天先学习在IIS中寄宿,记住,IIS寄宿只支持http协议的绑定。在IIS中寄宿,需要IIS5.1或更高版本的支持,IIS会为我们管理ServiceHost,同时为我们提供进程回收、空闲关闭、进程运行状况监视等特性支持,我们只需要把服务相关的文件按照一定的组织方法放入IIS的托管中,IIS会为我们管理一切。这种托管受到支持的系统很多,从Windows XP SP2 到 WIndows Server 2008,所以它非常流行。然而也有缺点,它只能接受http协议的绑定,对于tcp、管道、MSMQ都是不支持的。



今天的目标:完全手写一个寄存于IIS的服务。

(1)首先,新建一个文件夹,我取名为IISService。

(2)打开IIS管理器,在默认网站节点上点击右键->添加应用程序,为应用程序指定一个别名,这个可以随意起的,这个名字将成为将来服务地址的一部分,我把它起作IISService,物理路径就选择我们刚才建立的文件夹。

(3)建立服务文件。在VS2015中新建一个文本文件,并另存为HelloWCF.svc,路径即为刚才新建的文件夹。

内容为:

<%@ServiceHost 
			 language=c# 
			 Debug="true" 
			 Service="LearnWCF.HelloWCF"
%>
被<%%>框住的表示这个是一个服务器端包含,@ServiceHost 标签表示这是个WCF的服务。language=c# 表示我们用C#语言来写代码,Debug=true顾名思义了,最主要的是Service这个属性,他表示这个服务的实现类是什么,这里要用完全限定名,即要包括命名空间。


(4)编写定义服务的类文件。首先在IISService文件夹中新建文件夹取名为App_code。然后还是在VS2015中新建一个文本文件,并另存为HelloWCF.cs,路径即为App_code内。实现内容为:

using System;
using System.ServiceModel;

namespace LearnWCF
{
    [ServiceContract]
    public interface IHelloWCF
    {
        [OperationContract]
        string PHelloWCF();
    }

    public class HelloWCF : IHelloWCF
    {
        public string PHelloWCF()
        {
            return "Hello WCF!";
        }
    }
}

这代码应该很熟悉了。


(5)编写配置文件。打开VS2015新建文本文档,另存为web.config,路径为IISService文件夹。内容为:

<configuration>
  <system.serviceModel>
    <services>
      <service name="LearnWCF.HelloWCF" behaviorConfiguration="metaExchange">
        <endpoint address="" binding="wsHttpBinding" contract="LearnWCF.IHelloWCF"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metaExchange">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

该配置文件有些许变化。一是没有基地址了,因为寄存于IIS中了,基地址为: http://localhost/IISService/HelloWCFService.svc ;二是服务器终结点地址为空字符,这表示使用服务基地址表示终结点地址(这里也可以使用相对地址,但不能用绝对地址)。


(6)搭建完成后,就表示服务在IIS中寄存完成,只要IIS服务开启,那么就可以在页面中输入服务地址(http://localhost/IISService/HelloWCFService.svc)就可以和之前两次一样查看服务信息,如图。


总结:

这一篇我们学习了如何在IIS中寄宿WCF服务,必备的要素总结如下几点:

(1) 建立IIS应用程序及物理路径

(2) 在应用程序路径下建立XXX.svc文件用于声明WCF入口和服务地址导航

(3) 在应用程序路径的子目录App_Code下建立XXX.cs文件用于定义和实现服务协定

(4) 在应用程序路径下建立web.config 用于配置服务。

(5) 保持IIS为启动状态。


出现的问题:

HTTP 错误 404.3 – Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。

解决方法:



 



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值