wangchao.org
添加收藏 | 博客
 
购物视频论坛IT业界自然风光美女图片王朝网络小游戏BT下载生活百科编程设计手机图铃小说
 
笑话 | 水库 | 娱乐 | 体育 | 英语 | 宠物 | 美食 | 旅游 | 养生 | 手机 | 数码 | 汽车 | 珠宝 | 美容 | 装修 | 厨房 | 科普 | 动物 | 植物 | 影音 | 百科 | 知道 | 词典
  
 
 您好! 您现在位于: 王朝网络 → 编程设计 → 《gsoap中文文档(5.gSoap2.x版与gSOAP 1.x版的不同)返回上一页 
 
1楼 

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

  网上购物、在线购物、购物搜索 欢迎光临本站购买图书、影视、音乐、数码、百货,手机等商品。

  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); // 释放环境变量
  }

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); // 释放环境变量 }

 
标签: gSOAP  gSoap2  不同  中文  文档  版与  版的  
 
您可以将本页贴到其他网站
UBB代码HTML代码
 
 
 
 
 
 
 更多内容
 ·.net开发趣题两则-联想优秀程序员 ·Apache服务器配置全攻略 ·Java 从老虎变野马?好事还是坏事 ·TortoiseSVN从1.2.6升级到1.3.2过
 ·使用 SCTP 优化网络 ·使用 FUSE 开发自己的文件系统 ·[精华]AIX的域名服务 ·HOWTO build arm-linux toolchai
 ·来自Apache的Java开源项目 ·DHCP(动态主机配置协议)基本信 ·技术评论:明天,中间件在哪? ·温州IT主管联盟的未来走向
 ·The Three Faces of SOA ·我的第一个j2me程序 ·Java中文处理, 资源包后缀详解 ·发现一个技术升级了的带毒网站(
 ·查询数据库后返回Iterator ·项目经理需知的Java技术问题 ·10年回顾:世界各地开发高手谈Jav ·Java 理论和实践: 用软引用阻止内
 ·软件资产重用的具体内容 ·Ken Orr 对 Java 程序员的建议 ( ·正则表达式大全(regular express ·用Java实现Web服务器
 
 
最新评论  点此查看所有评论
 
 
 
 
发表评论(支持UBB码)


验证码:  
 
 
 
© 2005- 王朝网络 版权所有