• WCF服务重构实录(上)


    项目需求

    之前的项目中采用了WCF,绑定模式选择的是netTcpBinding,宿主选择了控制台方式,主要考虑两方面优点:

    • 方便管理宿主的生命周期
    • 提升服务性能

    但是在实际的开发过程中产生了许多问题,比如:

    • 调试项目时必须先启动控制台才能提供服务
    • 远程部署后,系统一旦注销就无法正常提供服务
    • 控制台中的异常导致服务实例一旦崩溃无法及时启动新的实例提供服务

    在经历了几个月的实践之后,我们决定改造WCF服务,宿主改成IIS,这样可以及时处理服务进程崩溃无法产生新服务进程的问题,我做了个Demo来尝试重构宿主。

    IIS6.0体系简析

    关于WCF寄宿到IIS上的问题,MSDN上有一篇文章说的很详细:

    http://msdn.microsoft.com/zh-cn/magazine/cc163357.aspx 使用 WAS 扩展 HTTP 之外的 WCF 服务

    这里仅做简要介绍:

    IIS 6.0的体系有两个基本组成部分,侦听器和工作进程:

    image

    侦听器进程由w3svc 服务实现,负责监控主机接收到的请求,根据绑定配置将请求递交给响应的处理程序的进程中,如对aspx文件的请求会递交给aspnet_isapi.dll来处理

    image

    工作进程是一种轻型可执行文件。当它开始对一个激活请求做出响应时,首先会加载一个简单的非托管填充程序 DLL (w3wphost.dll) 来支持 w3svc 与工作进程通信。该填充程序还负责加载 aspnet_isapi.dll,该文件会实现 ASP.NET 的托管组件和 IIS 的非托管组件之间的接口。之后便可以正常对请求方输出响应的数据了。

    IIS7.0对WCF的支持

    先看看这个图吧,

    在 IIS 6.0 中,w3svc 服务实际上承担着双重任务。它在 http.sys 中注册,并且是传入的 HTTP 通信的直接接收者,因此它充当 HTTP 侦听器。同时,它还拥有进程激活组件,负责正确启动 w3wp 的新实例以及分派请求。在 IIS 7.0 中,这两种责任被重构给了不同的 Windows NT 服务。w3svc 进程保留了其作为 HTTP 侦听器的角色,但负责配置和进程激活的组件被作为因子之一计入 WAS,WAS 包括三个部分:配置管理器、进程管理器、非托管侦听器适配器接口。

    我们这边使用到的正是TCP侦听,如果想在IIS7中支持TCP通信,我们需要配置几项

    WCF Activation

    image

    windows 进程激活服务

    image

    在IIS7中呢也需要进行配置tcp支持,首先确保IIS7开启后安装了.NET4.0的框架支持

    再配置网站的绑定,增加nettcp,默认端口是808,如果您要寄宿一个供Silverlight访问的服务最好设置为4502或者45**,与策略文件相对应

    image

    在高级设置中需要增加nettcp

    image

    好,配置到这里呢,IIS7已经可以支持TCP通信了,那么我们先来看Demo的代码结构。

    WCF服务Host在控制台的项目

    这个Demo的解决方案包括了一个控制台宿主和WCF的类库

    image

    服务很简单,提供一个加操作服务:

    public class Add:IAdd
        {
            public int GetResult(int numberA, int numberB)
            {
                return numberA + numberB;
            }
        }

    那么Host中的代码也很简单,启动服务

    static void Main(string[] args)
            {
                var host = new System.ServiceModel.ServiceHost(typeof(WCFLib.Add));
                host.Open();
                Console.WriteLine("service opened..");
                Console.Read();
            }

    配置文件指定了服务的地址和终结点信息:

    
        
          
            
              
                
                
              
            
          
        
        
          
            
            
           
        
        
          
            
              
              
              
              
            
          
        
      

    好,一个服务开发完成,可以正常运行了,下节将会对如何将这个HOST转到IIS上做介绍

    image

    文章索引:WCF服务重构实录(上)  WCF服务重构实录(中)

    Demo文件下载:https://files.cnblogs.com/wengyuli/WCFHostChange.rar

  • 相关阅读:
    android 通过canvas旋转 绘制文字 竖直等不同方向的显示
    [转]在.NET环境中实现每日构建(Daily Build)NAnt篇
    [转]如何让Android字体自适应屏幕分辨率
    [转]调用相机并将照片存储到sd卡上
    [转]在.NET环境中实现每日构建(Daily Build)ccnet,MSBuild篇
    [转]使用ANT打包Android应用
    [转]通过创建一个位图的XY Chart来学习Android绘图类Rect,Paint,Bitmap,Canvas(附源码)
    [转]android webview学习
    [转]敏捷开发中编写高质量Java代码
    MSDN Visual C++ 开发中心
  • 原文地址:https://www.cnblogs.com/wengyuli/p/WCF_Host_Change_IIS.html
Copyright © 2020-2023  润新知