前言
因工作需要,尝试将CS服务程序部署于Apache,尽管最后没有派上用场,还是抽空记录,也未尝是一次学习经历。
其实最先采用的是CGI,但是测试发现:每收到一个CGI请求,Apache都会启动一个新的Web Service进程来响应请求,并在请求处理完毕后,自动杀死进程,等价来说,针对每一个请求,都需要重新启动exe文件。
在CGI不符合需求的情况下,顺尝试采用FastCGI。FastCGI工作原理:
环境
Win7 32位,VS2013,gsoap-2.8.33, mod_fcgid-2.3.9, fcgi-2.4.1,Apache 2.2.25。下载
为了方便,已将所有资料打包处理。
Apache2.2 + FastCGI + gSOAP搭建 WebService工具Apache安装
选择自定义安装,勾选”Build Headers and Libraries”。mod_fcgid.so编译
解压mod_fcgid-2.3.9-crlf.zip后,用VS2013打开工程,修改工程属性:
1)C/C++ / 附加包含目录:
C:\Program Files\Apache Software Foundation\Apache2.2\include
2)连接器/附加库目录:
C:\Program Files\Apache Software Foundation\Apache2.2\lib
编译Release win32版本,生成文件mod_fcgid.so。
libfcgi.dll/libfcgi.lib编译
解压fcgi-2.4.1-SNAP-0910052249.tar.gz,用VS2013打开工程文件FastCGI.dsw,工程libfcgi编译Debug/Release win32版本,生成libfcgi.dll、libfcgi.lib。CSServer编译:
Win7 X86 + VS2013 + FastCGI 实现注意,工程属性中:
1)C/C++ / 附加包含目录:fcgi-2.4.1-SNAP-0910052249目录\include
2)连接器/附加库目录:fcgi-2.4.1-SNAP-0910052249目录\libfcgi\Release
3)连接器/附加依赖项:libfcgi.lib
4)将libfcgi.dll拷贝至CSServer.exe所在目录下。Apache配置
1)将第5步编译生成的mod_fcgid.so拷贝至目录“C:\Program Files\Apache Software Foundation\Apache2.2\modules”下。
2)修改配置文件文件httpd.conf:
增加代码,用于加载fastcgi模块:
LoadModule fcgid_module modules/mod_fcgid.so
文件末尾增加:
<IfModule mod_fcgid.c>
<Directory "C:\Users\Administrator\Desktop\CSServer\Bin\Debug">
SetHandler fcgid-script
Order allow,deny
Allow from all
</Directory>
ScriptAlias /myfcgid "C:\Users\Administrator\Desktop\CSServer\Bin\Debug\CSServerd.exe"
IdleTimeout 3600
ProcessLifeTime 7200
MaxProcessCount 64
DefaultMaxClassProcessCount 8
IPCConnectTimeout 300
IPCCommTimeout 7200
BusyTimeout 300
</IfModule>
修改完成后,重启Apache服务器。
- 测试
文中最后采用SoapUI进行简单测试,测试结果如下:
参考文献:
[1] Apache Fast CGI C++程序开发