compile the mod_gsoap of apache2 for win32

来源:互联网 发布:vmware 的ubuntu 编辑:程序博客网 时间:2024/04/30 08:34

mod_gsoap 修改过程
1. 使用.Net 2003通过原有的mod_gsoap.vcproj生成*.sln
2. 使用vc726将.vcproj转换成.dsp
3. 下载apache httpd win source package
4. 解压后,将mod_gsoap的文件拷入到modules/gsoap中
5. 向apache.dsw中添加mod_gsoap.dsp
6. 修改apache中的相关项目,去掉Generate debug info
7. **根据相似的其他mod修改mod_gsoap工程,要仔细检查所有项
8. 添加依赖工程libapr, libaprutil, libhttpd
9. 修改gsoap_handler中的一个错处:C,因此要在函数开始时声明变量。
10.向BuildBin中添加所有的mod_*
12.修改os/win32/BaseAddr.ref添加
+        mod_gsoap.so                0x6FFA0000    0x00010000
        libhttpd.dll            0x6FF00000    0x000A0000
13.mod_deflate下载zlib到srclib/zlib并根据zlib中的工程修改mod_deflate中的zlib包含的文件,mod_deflate.dep改名字,新建一个空的mod_deflate.dep
14.下载http://sourceforge.net/nasm,根据ssl中的指示编译ssl
15.下载http://sourceforge.net/gnuwin中的bison, flex and gawk
16.修改mod_gsoap.c中的frecv
+                        nRet = ap_get_client_block(r, pBuf, len > r->remaining ? (apr_size_t)r->remaining : len);
-                        nRet = ap_get_client_block(r, pBuf, len > r->remaining ? r->remaining : len);
17.配置http.conf
LoadModule gsoap_module modules/mod_gsoap.so

<IfModule mod_gsoap.c>
    <Location /soap>
        SetHandler gsoap-handler
        SOAPLibrary gsoap/calc.dll
    </Location>
</IfModule>

18.注意:for apache2的mod_gsoap,当直接使用浏览器时,会发生404错误,并且不像for apache1的那样提示相关信息。
因此要想测试,可以直接使用程序发送POST消息。如使用下面的python程序
import httplib, urllib, mimetools, time

body = """<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:ns="calc">
 <SOAP-ENV:Body id="_0">
  <add xmlns="calc">
   <a>10</a>
   <b>20</b>
  </add>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
"""

headers = {"Content-type": "text/xml:"}

conn = httplib.HTTPConnection("WY", "8000")
conn.request("POST", "/soap", body, headers)
response = conn.getresponse()
print response.status, response.reason
print response.msg
data = response.read()
print data
conn.close()


如果你不想自己编译,在
http://gsoapwzd.cosoft.org.cn/gsoapwzd/mod_gsoap/mod_gsoap.so
http://gsoapwzd.cosoft.org.cn/gsoapwzd/mod_gsoap/mod_calc.dll
http://gsoapwzd.cosoft.org.cn/gsoapwzd/mod_gsoap/add 2 httpd.conf
http://gsoapwzd.cosoft.org.cn/gsoapwzd/mod_gsoap/calc.h
下载。

 

原创粉丝点击