网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.为什么extends是有害的(一).
.[个人原创]JAVA 开发工具Jcreato.
.调用Java编译器API编译Java.
.Robocode 基本原理之方向剖析.
.jbpm中一种重要Node Decision的使.
.首页地址添加到收藏夹(javascrip.
.Java类装载体系中的隔离性.
.架构设计师(Architect)的专业与角.
.在Eclipse中使用Hibernate二(驵图.
.轻松有效检查Java代码的三个工具.
.JAVA程序员必读:基础篇(2.a)语言.
.EJB Timer Service的高级特性心得.
.Java咖啡馆(5)——Java语言基础.
.面向对象编程之:Java collectio.
.corba学习3--idl到java的映射.
.java绘制一个成交量的统计图.
.深入理解Java延迟绑定.
.优化entity Bean的七条准则.
.WebLogic Server 9.0:JMS增强功.
.使用J2EE Web应用的事件功能.

gsoap中文文档(5.gSoap2.x版与gSOAP 1.x版的不同)

发表日期:2008-1-5


5. gSoap2.x版与gSOAP 1.x版的不同
 假如你是从1.x版升级到2.x版,请注重下面的内容。
 gSOAP2.0及之后的版本是在1.x版基础上重写的。gSOAP2.0之后的版本是线程安全的,但之前版本不是。gSOAP2.x版本中的主要文件已经重新命名,以便与1.x版区分。

gSOAP 1.X  gSOAP 2.X 
soapcpp  soapcpp2 
soapcpp.exe  soapcpp2.exe 
stdsoap.h  stdsoap2.h 
stdsoap.c  stdsoap2.c 
stdsoap.cpp  stdsoap2.cpp 
 
 从1.x版升级到2.x版并不需要进行大量的代码重写工作。所有2.x版相关的函数都定义在stdsoap2.c[pp]文件中,这个文件是由gSOAP编译器自动生成的。所以,用1.x版开发的服务端或客户端代码需要进行修改以适应2.x版中函数的变化:在2.x版中,所有的gSOAP函数都增加了一个参数用来保存一个gSOAP运行环境实例。这个参数包括了文件描述,表,缓冲,标志位等,它在所有gSOAP函数中都是第一个参数。
 gSOAP运行环境实例是一个strUCt soap类型的变量。当客户端程序访问远程方法前或当服务端程序能够接收一个请求前,必须先将这个运行环境变量初始化。在2.x版中新增了3个函数来负责这些事情:
 函数                        解释
 soap_init(struct soap *soap)         初始化环境变量(只需执行一次)
 struct soap *soap_new()            定义并初始化环境变量并返回一个该变量的指针
 struct soap *soap_copy(struct soap *soap)   定义一个环境变量并从已有的环境变量中拷贝环境信息
 
  环境变量定义好后就可以重复使用而不必再次初始化了。只有当线程独占访问时,我们才需要一个新的环境变量。例如,下面的代码分配了一个用于多个远程方法的环境变量:
 int main()
{
   struct soap soap;
   ...
   soap_init(&soap); // 初始化环境变量
   ...
   soap_call_ns__method1(&soap, ...); // 调用一个远程方法
   ...
   soap_call_ns__method2(&soap, ...); // 调用另一个远程方法
   ...
   soap_end(&soap); // 清除环境变量
   ...
}
 我们也可以像下面这样定义环境变量:
 int main()
{
   struct soap *soap;
   ...
   soap = soap_new(); // 定义并初始化环境变量
   if (!soap) // 假如不能定义,退出
   ...
   soap_call_ns__method1(soap, ...); // 调用远程函数
   ...
   soap_call_ns__method2(soap, ...); // 调用另一个远程函数
   ...
   soap_end(soap); // 清除环境变量
   ...
   free(soap); // 释放环境变量空间
}
 
 服务端代码在调用soap_serve函数前,需要定义相关环境变量:

int main()
{
   struct soap soap;
   soap_init(&soap);
   soap_serve(&soap);

 或者像下面这样:

int main()
{
   soap_serve(soap_new());

 soap_serve函数用来处理一个或多个(当答应HTTP keep-alive时,参见18.11节中的SOAP_IO_KEEPALIVE标志)请求。
 一个web服务可以用多线程技术来处理请求:
int main()
{
   struct soap soap1, soap2;
   pthread_t tid;
   ...
   soap_init(&soap1);
   if (soap_bind(&soap1, host, port, backlog) < 0) exit(1);
   if (soap_accept(&soap1) < 0) exit(1);
   pthread_create(&tid, NULL, (void*(*)(void*))soap_serve, (void*)&soap1);
   ...
   soap_init(&soap2);
   soap_call_ns__method(&soap2, ...); // 调用远程方法
   ...
   soap_end(&soap2);
   ...
   pthread_join(tid, NULL); // 等待线程结束
   soap_end(&soap1); // 释放环境变量


上一篇:.net开发趣题两则-联想优秀程序员与专业程序员(downmoon) 人气:519
下一篇:[翻译]-Windows CE 程序设计 (3rd 版)--5.2 公共控件(七) 人气:849
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐