移植Windows自宿主WCF服务到Linux/Mono2.8
Windows服务是这些后台程序、后台服务的正规名词。Windows服务的运行可以在没有用户干预的情况下,在后台运行,没有任何界面。通过Windows服务管理器进行管理。服务管理器也只能做些简单的操作:开始,暂停,继续,停止。Windows服务的特点:在后台运行,没有用户交互,可以随Windows启动而启动。
后台服务在Unix/Linux上叫做Daemon,在Linux系统中就包含许多的Daemon。判断Daemon最简单的方法就是从名称上看。Linux下自动启动的服务都在/etc/rc.d/init.d/目录下,比如说mysql。如果不想让一个服务自动运行,把/etc/rc.d/init.d/目录下的这个服务脚本移除掉就可以(一定要移除吗,不可以使用类似Window下的手动启动?)。
可以操作的状态:
- start 启动服务,等价于服务脚本里的start命令
- stop 停止服务,等价于副外长脚本stop命令
- restart 关闭服务,然后重新启动,等价于脚本restart命令
- reload 使服不重新启动而重读配置文件,等价与服务脚本的reload命令
- status 提供服务的当前状态,等价于服务脚本的status命令
- condrestart 如果服务锁定,则这个来关闭服务,然后再次启动,等价于condrestart命令
Mono 下的Windows服务叫做mono-service,mono-service 运行.net 1.0 程序集 和用 mono-service2 运行.net 2.0 以上的程序集。mono 2.8已经不支持.net 1的程序了,所以我们现在都是使用mono-service2,命令行说明文档参考http://manpages.ubuntu.com/manpages/lucid/man1/mono-service.1.html。
-d:DIRECTOR
Y
Use this option to specify the working directory for the
service. The default is the current directory.
-l:LOCKFILE
Specifies the file to use for locking, the default is a filename
constructed in /tmp based on the name of the program that hosts
the service.
-m:MESSAGE
Name to show in the syslog.
-n:NAME
Use this to specify the service to be launched (if the program
contains more than one service). The default is to run the
first defined service.
--debug
Use this option to prevent mono-service from redirecting stdin
and stdout and prevent the program to be sent to the background.
Equivalent to --no-daemon
--no-daemon
Use this option to prevent mono-service from redirecting stdin
and stdout and prevent the program to be sent to the background.
Equivalent to --debug.
Mono 2.8对wcf的支持也比较好了,这里的例子就是将Windows下self host的一个wcf服务移植到Linux上。
1、在Window下编写一个WCF 服务端作为Window服务。我们服务的代码结构如下
要将.NET程序移植到Mono,我们一般会使用net 应用迁移到Mono 工具 (Moma)检查下兼容性。下面这个项目的检查结果,看看是不是Mono2.8完美支持WCF。
DynIPServiceWS是WCF的windows服务的宿主,我们把代码放到Linux下使用MonoDevelop编译.放到/home/geffzhang/Projects/DynIPServiceWS目录下,切换到这个目录,执行命令
mono-service DynIPServiceWS.exe
运行DynIPClient.exe,返回运行结果说明服务已经在运行,如果客户端出现目标机器积极拒绝说明服务没有启动。
mono DynIPClient.exe。
关于Mono下的WCF的可以参考这个博客,作者 写了一个系列的文章:http://veritas-vos-liberabit.com/monogatari/
本文的例子下载:http://cid-33478a966734670f.office.live.com/self.aspx/.Public/WCF/DynIPUpdater%5E_0.1.zip
目前还有一个问题没有解决,就是如何把mono-service包装成Linux的Daemon,留待后续补充,欢迎有做好的同学共享下怎么做? http://www.cnblogs.com/sjhrun2001/archive/2009/03/10/1408264.html
- Typescript 查缺补漏
- Git -- Stash
- Git -- Rebase
- Git -- 分支与合并 (命令行+可视化工具p4merge) Fast Forward 合并禁用 Fast Forward 合并自动合并解决合并的冲突
- 使用Angular CLI进行单元测试和E2E测试
- Git - 使用命令和P4Merge进行diff
- 使用Angular CLI进行Build (构建) 和 Serve
- 使用Angular CLI生成路由
- 使用Angular CLI从蓝本生成代码
- 使用Angular CLI生成 Angular 5项目
- Git基本命令 -- 创建Git项目
- Entity Framework Core 2.0 入门
- 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传
- 用VSCode开发一个asp.net core 2.0+angular 5项目(4): Angular5全局错误处理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法