尝试将 gSoap 与 WCF 和 WSHttpBinding 一起使用
Posted
技术标签:
【中文标题】尝试将 gSoap 与 WCF 和 WSHttpBinding 一起使用【英文标题】:Trying to use gSoap with WCF and WSHttpBinding 【发布时间】:2011-12-25 18:03:28 【问题描述】:我正在尝试使用 gSoap 库通过 WSHttpBinding 与 WCF 服务器通信。我似乎遇到了 gSoap 的 WS-Addressing 插件的问题。当我启用 WS-Addressing 插件时,通过使用 #import "wsa5.h" 我无法再编译。现在,soapC.cpp 中有未解析的符号。第一个错误在soap_getelement(soap*, int*) 中。错误是 SOAP_TYPE_wsa5_IsReferenceParameter。这是我第一次尝试使用 gSoap。任何建议表示赞赏。
gSoap 版本 2.8.4
【问题讨论】:
我觉得我的问题和这个有关...msdn.microsoft.com/en-us/library/… 【参考方案1】:您可以将 WSA 部分添加到您的 Typemap 文件中,然后在您的 wsdl2h 命令中使用 -t 参数指定它。
即:
wsdl2h -o target.h -t EditedTypemap.dat target.wsdl
您可以从 gSOAP 目录中复制标准 Typemap.dat 并对其进行编辑,使其如下所示:
wsa = <http://schemas.xmlsoap.org/ws/2004/08/addressing>
SOAP_ENV__Header =\
#import "wsa.h"\n\
struct SOAP_ENV__Header\n\
\n\
mustUnderstand _wsa__MessageID wsa__MessageID 0;\n\
mustUnderstand _wsa__RelatesTo * wsa__RelatesTo 0;\n\
mustUnderstand _wsa__From * wsa__From 0;\n\
mustUnderstand _wsa__ReplyTo * wsa__ReplyTo 0;\n\
mustUnderstand _wsa__FaultTo * wsa__FaultTo 0;\n\
mustUnderstand _wsa__To wsa__To 0;\n\
mustUnderstand _wsa__Action wsa__Action 0;\n\
;
然后如上所述重新运行 wsdl2h。希望这对你有用! gSOAP 是一个很棒的工具包,只是有点难以入门。
【讨论】:
另外,如果这对您不起作用,您可以查看 gSOAP 目录gsoap-2.8/gsoap/doc/wsa/html/wsa_0.html
在我的情况下,因为我使用的是 gSOAP 2.8。本文档提供了使用 WSA 插件的明确指南,并包含 samlpe 代码。
谢谢!但是,该代码已经在我的 soapStub.h 文件中,无需修改我的 typemap.dat。我进行了数据包捕获,看起来 wsaw 命名空间中有一些来自 WCF 端的标签。我仔细看了看,它指的是 2006/05 规范:(
啊,我明白了。我将牢记这一点,因为我正在开发 gSOAP 客户端和服务器,但我没有成功编译 gSOAP 2.8 calc++ 示例。因此,我将从这里深入研究 gSOAP。如果我发现任何可能对你有用的东西,我会确保 PM 你。祝你好运!以上是关于尝试将 gSoap 与 WCF 和 WSHttpBinding 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Windows 与 Linux 上的 gSOAP C++ 代码