Web Services--gSOAP 2.7.6 第五章(5)

翻译 2013年12月03日 23:14:19

下载地址:http://sourceforge.net/projects/gsoap2

官方网站:http://genivia.com/Products/gsoap/index.html

本文翻译只是出于学习的目的,中文部分仅代表个人观点,有错误还望指正,英文部分来自gsoap-win32-2.7\doc\soapdoc2.pdf。其中复制可能有误,可以看懂英文的还请到官网下载。如有版权争议,请联系QQ:643166601,本人会及处理。翻译新手,有错是必然的,求高人指点。欢迎同为新手的你共同学习。

 

5 Differences Between gSOAP Versions 1.X and 2.X

5 gSOAP 版本1.X 2.X 版本之间的差异

You should read this section only if you are upgrading from gSOAP 1.X to 2.X.

你应该读这个部分如果你要更新从gSOAP 1.X 到 2.X (版本).

gSOAP versions 2.0 and later have been rewritten based on versions 1.X. 

gSOAP 版本2.0 和 最近(版本)已经被重写的了基于 版本1.X.

gSOAP 2.0 and later is thread-safe, while 1.X is not. 

gSOAP 版本2.0 和 最近是线程安全的,而 1.X 不是(线程安全的)

All files in the gSOAP 2.X distribution are renamed to avoid confusion with gSOAP version 1.X files:

所有的文件在gSOAP 2.X(版本)中都被重命名目的是避免混淆和 gSOAP 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

Changing the version 1.X application codes to accommodate gSOAP 2.X does not require a significant amount of recoding.

改变版本 1.X 应用代码去适应 gSOAP 2.X 不需要一个重大数量的重编码。

The change to gSOAP 2.X affects all functions defined in stdsoap2.c[pp] (the gSOAP runtime environment API) and the functions in the sources generated by the gSOAP compiler (the gSOAP RPC+marshalling API). 

这个改变到 gSOAP 2.X 影响所有的函数定义在 stdsoap2.c[pp](gSOAP运行环境API) 和函数,在源代码被产生通过gSOAP编译器(gSOAP RPC+编组API)

Therefore, clients and services developed with gSOAP 1.X need to be modified to accommodate a change in the calling convention used in 2.X: In 2.X, all gSOAP functions (including the remote method proxy routines) take an additional parameter which is an instance of the gSOAP runtime environment that includes file descriptors, tables, buffers, and flags. 

因此,客户端和服务端被开发用gSOAP 1.X 需要被修改去适应一个变化在调用约定被使用在2.X中,所有的gSOAP函数(包括远程方法的代理程序)采用一个额外的参数,它是一个gSOAP运行时环境的的实例,包括文件描述符,表,缓冲区,和标志。

This additional parameter is always the first parameter of any gSOAP function. 

这个额外的参数总是第一个参数在任何gSOAP函数中。

The gSOAP runtime environment is stored in a struct soap type. 

这个gSOAP运行时环境是一个被存储于一个soap结构体的类型。

A struct was chosen to support application development in C without the need for a separate gSOAP implementation. 

这个结构体将被选择去支持一个程序开发在C中,不需要一个单独的gSOAP实现。

An object-oriented approach with a class for the gSOAP runtime environment would have prohibited the implementation of pure C applications. 

一个面向对象的方法用一个类给这个gSOAP运行时环境,将禁止这个实现的纯C应用。

Before a client can invoke remote methods or before a service can accept requests, a runtime environment need to be allocated and initialized. 

之前一个客户段能回收远程方法或在一个服务之前接收一个请求,一个运行时环境需要被分配和被初始化。

Three new functions are added to gSOAP 2.X:

三个新函数被增加到gSOAP 2.X:

 

Function

Description

soap_init(struct soap *soap) Initializes a runtime environment (required only once)

初始化一个运行时环境(被请求仅一次)

struct soap *soap_new() Allocates, initializes, and returns a pointer to a runtime environment

分配,初始,和返回一个指针指向运行时

struct soap *soap_copy(struct soap *soap) Allocates a new runtime environment and copies contents of the argument environment such that the new environment does not share any data with the original environment

分配一个新的运行时环境和和拷贝环境参数,这样新的环境不共享任何数据和原来的环境。

 

An environment can be reused as many times as necessary and does not need to be reinitialized in doing so. 

一个环境能被多次作为重新使用作为必要,不需要重新初始化。

A new environment is only required for each new thread to guarantee exclusive access to a new runtime environment by each thread. 

一个新的环境是必须的对于每一个新的线程去保证排他访问一个新的运行环境。

For example, the following code stack-allocates the runtime environment which is used for multiple remote method calls:

例如,下面的代码 堆分配这个运行时环境,它是被用来多次远程方法被调用:

 

int main()

{

struct soap soap;

...

soap_init(&soap); // initialize runtime environment 初始运行时环境

...

soap_call_ns__method1(&soap, ...); // make a remote call 一个远程调用

...

soap_call_ns__method2(&soap, ...); // make another remote call 另一个远程调用

...

soap_destroy(&soap); // remove deserialized class instances (C++ only) 移除反序列化类实例(只有C++)

soap_end(&soap); // clean up and remove deserialized data 清理和移除反序列化数据

soap_done(&soap); // detach environment (last use and no longer in scope) 分类环境(最近使用和不再范围)

...

}

 

The runtime environment can also be heap allocated:

这个运行时环境也能在栈上被分配:

int main()

{

struct soap *soap;

...

soap = soap_new(); // allocate and initialize runtime environment 初始运行时环境

if (!soap) // couldnt allocate: stop 不能申请到:stop

...

soap_call_ns__method1(soap, ...); // make a remote call 一个远程调用

...

soap_call_ns__method2(soap, ...); // make another remote call 另一个远程调用

...

soap_destroy(soap); // remove deserialized class instances (C++ only) 移除反序列化类实例(只有C++)

soap_end(soap); // clean up and remove deserialized data 清理和移除反序列化数据

soap_done(soap); // detach runtime environment 分类运行时环境

...

free(soap); // deallocate runtime environment 释放运行时环境

}

 

A service need to allocate and initialize an environment before calling soap_serve:

一个服务需要去申请和初始一个环境在调用soap_serve之前:

int main()

{

struct soap soap;

soap_init(&soap);

soap_serve(&soap);

}

Or alternatively:

或者二者择一地:

int main()

{

soap_serve(soap new());

}

The soap_serve dispatcher handles one request or multiple requests when HTTP keep-alive is enabled (with the SOAP_IO_KEEPALIVE flag see Section 18.11).

这个 soap_serve 调度处理一个请求或多个请求当 HTTP 保活是激活的(用 SOAP_IO_KEEPALIVE,请看 18.11部分)

A service can use multi-threading to handle requests while running some other code that invokes remote methods:

一个服务能有多线程去去处理请求,同时运行一些其他的代码调用远程方法;

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, ...); // make a remote call 一个远程调用

...

soap_end(&soap2);

...

pthread_join(tid, NULL); // wait for thread to terminate 等待线程终止

soap_end(&soap1); // release its data 释放数据

}

In the example above, two runtime environments are required. 

在以上的例子中,两个运行时环境是必须的。

In comparison, gSOAP 1.X statically allocates the runtime environment, which prohibits multi-threading (only one thread can invoke remote methods and/or accept requests due to the single runtime environment). 

相比之下,gSOAP 1.X 静态申请这个运行时环境,禁止多线程(只有一个线程能调用远程方法 或 接收请求由于这个单一的运行时环境 )

Section 7.2.4 presents a multi-threaded stand-alone Web Service that handles multiple SOAP requests by spawning a thread for each request.

7.2.4 部分提出了一个多线程的单机 Web Service,它处理多 SOAP请求通过大量生产一个线程对每个请求。

相关文章推荐

Web Services--gSOAP 2.7.6 第七章(7.2.1)

下载地址:http://sourceforge.net/projects/gsoap2 官方网站:http://genivia.com/Products/gsoap/index.html ...

Web Services--gSOAP 2.7.6 第七章(7.1.2)

下载地址:http://sourceforge.net/projects/gsoap2 官方网站:http://genivia.com/Products/gsoap/index.html ...

Web Services--gSOAP 2.7.6 第一章(1.2)

下载地址:http://sourceforge.net/projects/gsoap2 官方网站:http://genivia.com/Products/gsoap/index.html ...

ONVIF协议网络摄像机(IPC)客户端程序开发(4):使用gSOAP生成Web Services框架代码

《ONVIF协议网络摄像机(IPC)客户端程序开发》专栏,学ONVIF,跟我来!!!

TEC1701.WebADI开发技术总结 - 第五章 通过API自动创建Web ADI(5/6)

第五章  通过API自动创建Web ADI 在创建一些不是很复杂的WebADI时,使用标准的API来创建会非常方便。通过API生成的WebADI在界面上是无法修改的。 客制化的Integrat...

《响应式Web设计-HTML5和CSS3实战》阅读笔记第五章

概要总结CSS3给前端开发带来了什么 提供各种效果:圆角、背景渐变、文字阴影、盒阴影、自定义字体以及多重背景图片。IE6-8不支持CSS3,有需要可以使用腻子脚本。 CSS规则解析 规则由选择...

来自知乎-Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么?

一个学期前我也和楼主差不多不知道这些都是啥,一个学期之后差不多都弄懂了,来讲讲自己的理解吧 > 首先要知道网站访问大概是什么个过程: 假设你在浏览器地址栏输入这个问题的地址 http:...

AllJoyn核心应用教程【第五章】:Base Services服务之Configuration

Configuration服务为开发者提供configuration设备的能力,如更改设备名称或设备密码基本概念在Configuration服务中存在两种角色: configuration服务器:服务...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Web Services--gSOAP 2.7.6 第五章(5)
举报原因:
原因补充:

(最多只允许输入30个字)