我想在商业上分发的产品中使用gSOAP.我想到的用途是我怀疑是一个非常典型的工作流 - 使用wsdl2h生成标头,使用soapcpp2消耗标头,然后在我的代码中调用存根中生成的函数.
我不是百分之百确定我需要使用哪些许可才能做到这一点.这里有没有人经历过这个并找到了解决方案?
我试图用一个简单的例子来使用gSoap,用于VS2008.
我做了以下事情:
wsdl2h -o Init.h http://myservices/InitalisationService.asmx?WSDL
Run Code Online (Sandbox Code Playgroud)
然后这个:
soapcpp2 -I "C:\3pSDK\gsoap-2.7\gsoap\import" -i -C -limport Init.h
Run Code Online (Sandbox Code Playgroud)
它产生许多文件.我的项目文件夹如下所示:
// generated files
Init.h
InitalisationServiceSoap.initalizePlayer.req.xml
InitalisationServiceSoap.initalizePlayer.res.xml
InitalisationServiceSoap.nsmap
InitalisationServiceSoap12.initalizePlayer.req.xml
InitalisationServiceSoap12.initalizePlayer.res.xml
InitalisationServiceSoap12.nsmap
ortC.cpp
ortH.h
ortInitalisationServiceSoap12Proxy.cpp
ortInitalisationServiceSoap12Proxy.h
ortInitalisationServiceSoapProxy.cpp
ortInitalisationServiceSoapProxy.h
ortMatlab.c
ortMatlab.h
ortStub.h
// Project Files
ReadMe.txt
stdafx.cpp
stdafx.h
WebServicesClient.cpp
WebServicesClient.vcproj
targetver.h
// files added to the project from gSoap folder
stdsoap2.cpp
stdsoap2.h
typemap.dat
Run Code Online (Sandbox Code Playgroud)
当我构建时,我得到了很多链接器错误(未解析的外部).我找不到任何可以链接的东西(例如没有二进制库) - 我错过了什么?
我认为这可能与文档中的以下内容有关:
要完成构建,请使用您的代码编译和链接生成的soapC.cpp,soapcalcProxy.cpp和运行时gSOAP引擎-lgsoap ++(或使用源stdsoap2.cpp,以防libgsoap ++ .a未安装).
win32有一个gsoap ++库吗?
1>Compiling...
1>WebServicesClient.cpp
1>ortC.cpp
1>Generating Code...
1>Linking...
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultcode referenced …Run Code Online (Sandbox Code Playgroud) 这甚至可能吗?
我知道,我可以进行单向异步通信,但我希望它是双向的.
换句话说,我问的请求/响应模式,但非 -blocking,等中描述这里(3 次选择)
与使用gSoap的异步,已确认的点对点连接相关 - 我也想使(n)acks同步
我正在尝试实现两个Windows服务,每个服务都是自己的gSoap接口,并且都是每个接口的客户端和服务器.所以我的问题是我在两个接口(带有成员的类)中使用相同的数据类型,并使用soapcpp2.exe -q选项生成c ++代码,这将创建两个不同的命名空间,这很好,它可以工作,但问题是由于名称空间分离,两个接口中应该相同的数据类型现在是不同的,但是如果我删除名称空间,我将发生冲突,因为共享数据类型在两个接口中具有相同的名称.
"问题:
interface 1:
---
>class xsd__Address
{
char *email;
char *url;
};
>int ns1__getAddress(xsd__Address& ret);
---
interface 2:
---
>class xsd__Address
{
char *email;
char *url;
};
>int ns2__setAddress(xsd__Address& ret);
---
Run Code Online (Sandbox Code Playgroud)
在每个头文件的定义之后我用soapcpp2.exe编译它,例如:
soapcpp2.exe -qintf1 -n xxxx //用于接口1
soapcpp2.exe -qintf2 -n xxxx //用于接口2
所以当我的项目中使用两个接口(接口1和接口2)时,我需要这样的东西:
intf1::Interface1 int1;
int1.endpoint="xxx";
intf1::ns__Address address;
int1.ns1__getAddress(address);
intf2::Interface1 int2;
int2.endpoint="xxx";
int2.ns2_setAddress(address); //this don't compile like i was expecting because to the compiler they are not the same object (and it is wright...)
Run Code Online (Sandbox Code Playgroud)
问题:
是否可以在两个或更多接口之间共享数据类型?是?这是如何实现的?
如果不是,实施这个的最佳解决方案是什么?
我已经尝试使用gSOAP访问Web服务(例如,使用提供的WSDL生成C存根,然后在应用程序中使用它们).但是,我发现生成的.c和目标文件非常大(几兆字节),这是我工作的嵌入式环境中的一个问题.
您是否知道任何更简单的SOAP库,或者我是否必须回归到通用XML生成器和解析器(如ezXML)?
我到处寻找这个,我找不到一个像样的代码.如何使用GSOAP访问Amazon AWS S3服务?
我正在运行PHP前端到一个应用程序,该应用程序对数据进行大量工作并使用Cassandra作为数据存储.
但是我知道PHP不会给我一些计算所需的性能(以及需要在内存中的大量数据的管理)
我想用C++编写支持的东西,并从PHP应用程序访问它.我正试图弄清楚两者接口的最佳方法.
我看过的一些选项:
以上只是我看过的东西,我不限制自己.
传输到PHP应用程序的数据非常小,因此不需要流式传输.仅传输计算结果.
你们有什么感想?
这是我的情况:
wsdl"翻译"到这样的头文件:wsdl2h -o file.h file.wsdlsoapcpp2 -Icorrect_path -j file.hsoapXXXService.[h|cpp]soap_init2(含SOAP_IO_KEEPALIVE),我有soap_bind,soap_accept,soap_copy,等它似乎完全正常工作(见下文)proxy对象(再次使用SOAP_IO_KEEPALIVE),构造消息并将其发送到服务器XML)ACK,一切都很好.所以,我现在要做的是让"服务器"返回"真实"响应"客户端","客户端"必须返回ACK"服务器".
这怎么可能?(它应该是)
"你试过什么?"
我想到了两件事.
第一种方法是以某种方式重用套接字的文件描述符,从中返回soap_accept,将"真实响应"发送回服务器.但这甚至可能吗?
Unix套接字是全双工的,所以这在技术上是可行的,但是这gSoap限制了吗?因为我在文档中没有看到任何相关内容.
我想到的第二个选择是在"客户端"中创建相同的"服务",以便能够接收消息("真实响应")并返回ACK与在"服务器"中完成相同的方式. .但这意味着,"服务器"还必须有一个proxy对象实例才能发送这个所谓的"真实响应".
这对我来说听起来真的很丑陋.如果这是唯一的选择,我不会感到惊讶,但..
编辑:对于第二个选项 - 这意味着,客户端应该有一个侦听器端口,应该处理传入的连接等.听起来不像我的客户端..
我明白,我可能会遗漏一些有用的基本部分gSoap,但我阅读了整个用户文档和"入门"指南,但我没有找到任何相关信息.
如果不清楚,请告诉我
编辑:这是我希望实现的方案:
如何编写一个gsoap restful C++/Solaris客户端,它应该使用流媒体将文档(xsd__base64Binary)发送到webservice?
我们尝试编写一个没有流式传输的gsoap restful客户端,它工作正常.我们使用gsoap生成了一个请求xml(serialization-soap_begin_send( - ),soap_serialize( - ),soap_put( - ),soap_end_send( - )),然后使用了soap_post_connect(---),soap_send(---) ,soap_end_send(---)发送请求.
我们在gsoap客户端使用MTOM进行流式处理并且工作正常.是否可以在gsoap restful客户端中流式传输文档?我们可以在宁静的情况下使用MTOM吗?如果是,请您告诉我们,我应该使用什么gsoap函数进行序列化,然后发送该xml请求?如果您有任何示例代码,请分享.
我正在尝试将gSoap2.8与VS2010 C++项目一起使用,我宣布了一个预构建事件
wsdl2h.exe -o test.h "test.wsdl"
Run Code Online (Sandbox Code Playgroud)
然后它说
error C1083: Cannot open type library file:<path>\stlvector.h: Error loading type library/DLL. <path>\test.h
Run Code Online (Sandbox Code Playgroud)
所以我用-s来摆脱如下
wsdl2h.exe -s -o .\test.h "test.wsdl"
Run Code Online (Sandbox Code Playgroud)
但后来它说
error : #import: Cannot open file "soap12.h" for reading
Run Code Online (Sandbox Code Playgroud)
我怎么能摆脱这个?
gsoap ×10
c++ ×8
c ×4
linux ×2
soap ×2
amazon-s3 ×1
asynchronous ×1
client ×1
licensing ×1
open-source ×1
rest ×1
signature ×1
soap-client ×1
thrift ×1
unix ×1
visual-c++ ×1
web-services ×1
wsdl ×1