尝试将 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++ 代码

gsoap - 定义一个对所有会话持久的变量

gSOAP - 到 C 结构的 XML 数据(也由 gSOAP 生成)

SignalR 自托管与 WCF 服务和客户端将是桌面用户

将 DTO 与 WCF 结合使用

gsoap - SOAP Header 中的 WS-Addressing 元素