当前位置: 首页 > 编程日记 > 正文

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文件下载:http://files.cnblogs.com/wengyuli/WCFHostChange.rar

相关文章:

【Qt】QTest:编译Qt单元测试程序

一、使用方法 1、测试程序源码 TestQString.pro QT += testlib QT -= gui TARGET = tst_TestQStringTest CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += tst_TestQStringTest.cpp DEFINES += SRCDIR=\\\"$$PWD/\\\"tst_Test…

1/10个iPhone Xs = 英伟达最便宜AI计算机,这是唯一的“核弹”?

整理 | 一一、阿司匹林出品 | AI科技大本营(ID:rgznai 100)北京时间 3 月 19 日 8 点左右,在美国加州圣何塞的圣何塞大学活动中心,第十届 GTC 大会的主会结束。与往年相比,尽管 99 美元的 AI 计算机备受关注&#xff0…

Python链接MySQL

本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用。 PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 Django中也可以使用PyMySQL连接MySQL数据库。 PyMySQL安装 使用pycharm安装PyMySQL 点击File-->右…

利用sendEmail-v1.55转发邮件

设置: /sendEmail-v1.55/sendEmail -f testtest.com -t 532126277qq.com -s s.test.com -xu testtest.com -xp 123456789 -a 文件的路径 -u 主题 -m 内容转载于:https://blog.51cto.com/holy2010/537968

【Git】git系统学习(一):常用指令

1、配置工具 $ git config --global user.name "[name]"设置用户名 $ git config --global user.email "[email address]"设置邮箱 $ git config --global color.ui auto自动配置命令行的输出颜色 $ git config --global color.ui true全部打开颜色配置…

腾讯裁撤中层干部,拥抱年轻人

据 36Kr 最新报道,数名消息人士证实,2018 年 12 月内部员工大会后,腾讯开始裁撤一批中层干部。整个腾讯大概有两百多名中干,此轮调整比例约为10%,有战略发展部的腾讯员工认为,实际甚至超过了这个比例。截止…

cmder里ls、pwd、自定义的alias等一系列命令都无法使用

win10下cmder很多命令history pwd无法使用,ls字体也没有颜色显示,其根本原因是win10下cmd控制台版本问题,切换回老版本就OK了 转载于:https://www.cnblogs.com/hdk1993/p/8620799.html

文件操作01 - 零基础入门学习C语言60

第十一章:文件操作01 让编程改变世界 Change the world by program C文件概述 所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执…

iPad mini时隔四年更新,搭载A12芯片,起售价2999

整理 | 非主流出品 | AI科技大本营(公众号id:rgznai100)距离苹果的春季发布还有一周,但就在昨天,苹果毫无征兆地给广大果粉来了一场预热。3 月 18 日下午,苹果官网进行更新,悄悄地推出了两款新品…

【Qt】通过QtCreator源码学习Qt(一):pro文件

1、学习目的 学习pro文件的语法规则,这在跨平台项目中会经常用到。和条件编译相似,在pro中可以根据平台选择不同的编译模块、文件,还可以向源码中传递变量等。 2、学习方法 通过学习QtCreator源码中的pro文件,来掌握pro文件语法规则,下面以qtcreator.pro文件为例,先看…

TCP和UDP相关记录

有关于计算机网络的知识,准确来说我也忘得差不多了,现在要开始找实习了。努力从新学一下,记录在这里以防丢失。 --------------------------------------------------------- 首先对于网络层次有很多种分法。大致有7层结构、5层结构、4层结构…

win2003服务器iis6.0环境下php5.3.2安装配置

IIS6PHP5.3.2配置: 在windows下使用ApachePHP的,请选择VC6版本; windows下使用IISPHP的,请选择VC9版本 首先要知道的是,那个服务器平台对应PHP那个版本: 1、在windows下使用ApachePHP的,请选择…

李飞飞宣布成立斯坦福“以人为本AI研究院”

本位首发于公众号极客公园(ID:GeekPark)作者 | 沈知涵、biu编辑 | 宋德胜AI 不是要取代我们,而是让我们做得更好。这一次,台上的李飞飞不是 Google Cloud 的首席科学家,也不是斯坦福人工实验室(…

【Qt】菜单栏、工具栏、状态栏、右键菜单的实现

在QMainWidget基础上实现菜单栏、工具栏、状态栏、右键菜单。 头文件: #ifndef GWDEMO_H #define GWDEMO_H#include <QMainWindow> #include <QMenu> #include

云计算公司Zuora提交IPO申请 预计募资1亿美元

2019独角兽企业重金招聘Python工程师标准>>> 总部位于硅谷的云计算公司 Zuora 周五向美国证券交易委员会&#xff08;SEC&#xff09;提交招股说明书&#xff0c;计划通过首次公开募股&#xff08;IPO&#xff09;募集 1 亿美元资金。 Zuora 已发布针对云计算提供商…

浅谈“闭包”,什么才是“闭包”思想!—— javascript

先看一个简单小案例&#xff1a;<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME"Generator" CONTENT""> <META NAME"…

Debug神经网络的五项基本原则

整理 | 琥珀出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;很多情况下&#xff0c;研究人员会遇到一个问题&#xff1a;使用机器学习框架实现的神经网络可能与理论模型相去甚远。验证这款模型是否可靠&#xff0c;直接方式就是不断修正和调参。例如…

iOS获取手机型号

2019独角兽企业重金招聘Python工程师标准>>> //不同iPhone设备屏幕比例 iPhone5&#xff0c;4寸&#xff0c;比例16&#xff1a;9 iPhone5c&#xff0c;4寸&#xff0c;比例16&#xff1a;9 iPhone5s&#xff0c;4寸&#xff0c;比例16&#xff1a;9 iPhone6&#x…

【Qt】通过QtCreator源码学习Qt(二):跨平台编程

1、Qt对当前平台的判断 在qsystemdetection.h中根据宏定义来判断当前的操作系统,常用的操作系统如下: Q_OS_WIN、Q_OS_LINUX、Q_OS_MAC、Q_OS_UNIX qsystemdetection.h源码如下 #ifndef QGLOBAL_H # include <QtCore/qglobal.h> #endif#ifndef QSYSTEMDETECTION_H

能说明你的Javascript技术很烂的五个原因

Javascript 在互联网上名声很臭&#xff0c;但你又很难再找到一个像它这样如此动态、如此被广泛使用、如此根植于我们的生活中的另外一种语言。它的低学习门槛让很多人都称它为学 前脚本语言&#xff0c;它另外一个让人嘲笑的东西是动态语言的概念是偏偏使用了高标准的静态数据…

FPGA在人工智能时代的独特优势

来源 | 老石谈芯作者 | 老石&#xff0c;博士毕业于伦敦帝国理工大学电子工程系&#xff0c;现任某知名半导体公司高级FPGA研发工程师&#xff0c;深耕于FPGA的数据中心网络加速、网络功能虚拟化、高速有线网络通信等领域的研发和创新工作。曾经针对FPGA、高性能与可重构计算等…

【Qt】通过QtCreator源码学习Qt(三):linux平台的信号、程序崩溃处理

崩溃处理设置:CrashHandlerSetup 1、原理 在堆中为信号处理函数分配一块区域,作为该函数的栈使用,当系统默认的栈空间用尽时,调用信号处理函数使用的栈是在堆中分配的空间,而不是系统默认的栈中,所以它仍旧可以继续工作,执行崩溃处理程序。 崩溃处理使用的LSM(Linux…

WebGL 3D 工业隧道监控实战

2019独角兽企业重金招聘Python工程师标准>>> 前言 监控隧道内的车道堵塞情况、隧道内的车祸现场&#xff0c;在隧道中显示当前车祸位置并在隧道口给与提示等等功能都是非常有必要的。这个隧道 Demo 的主要内容包括&#xff1a;照明、风机、车道指示灯、交通信号灯、…

设计模式(4)-序列生成器之单例模式

场景&#xff1a;序列生成器 系统中统一的序列生成程序&#xff0c;整个系统统一一套&#xff01;那么就用单例模式吧&#xff01; 首先看看单例模式 1&#xff09;类持有一个自己的实例&#xff0c;而且还是个静态实例。 2&#xff09;类的构造函数为私有属性。 3&#xff09;…

【Qt】通过QtCreator源码学习Qt(四):插件管理PluginManager

1、简介 QtCreator使用插件架构,方便扩展。它的核心是插件管理,主类是PluginManager。 下面是翻译src\libs\extensionsystem\pluginmanager.cpp中关于插件的一些说明,后续会详细分析插件管理的代码。 2、名字空间、主要类介绍 插件使用的名字空间是namespace:ExtensionS…

云从科技3D人体重建技术刷新3项纪录!仅凭照片即可生成精细模型

3 月 19 日&#xff0c;根据官方消息&#xff0c;云从科技基于单帧图像的 3D 人体重建技术同时在 Human3.6M、Surreal 和 UP-3D 三大数据集上创造了最新的世界纪录&#xff0c;将原有最低误差记录大幅降低 30%。Human3.6M 数据集上对比Surreal 数据集上对比UP-3D 数据集上对比3…

windows7/8 安装mysql5.7

简单记录下安装步骤&#xff1a; 网上下载了安装包&#xff0c;一路next默认即可&#xff0c;中间会出现 选择安装x64或 x86版本&#xff0c;这边科普下 x86代表32位操作系统&#xff0c;x64代表64位操作系统。 如果提示3306端口被占用&#xff0c;执行下netstat -aon|findst…

FGMap学习之--三维地图

你是否想让自己的地图以三维的形式展示出来呢&#xff1f;在三维下查看QQ地图、Bing地图、MapABC地图或者自己的地图是否有不一样的感觉呢&#xff1f;今天我们就来看看如果使用FGMap API来实现这个功能。 上次我们做了一个天气预报的示例&#xff0c;今天我们在三维地图上查看…

NLP实践:对话系统技术原理和应用

本文节选自电子工业出版社《自然语言处理实践&#xff1a;聊天机器人技术原理与应用》作者&#xff1a;王昊奋&邵浩&李方圆&张凯&宋亚楠以下是节选内容按照技术实现&#xff0c;我们可将任务驱动的对话系统划分为如下两类&#xff1a;模块化的对话系统分模块串…

沃尔沃加入英伟达阵营 2021年开卖自动驾驶汽车

随着研发的深入&#xff0c;自动驾驶行业越来越显现出合纵连横的趋势。本周&#xff0c;英伟达阵营再次迎来新的合作伙伴——沃尔沃和瑞典汽车零部件供应商Autoliv。其实此前沃尔沃的自动驾驶项目“DriveMe”所用的测试车辆就搭载了英伟达DrivePX平台&#xff0c;该公司的自动驾…