【问题标题】:SOAP & WS-Addressing using gsoap使用 gsoap 进行 SOAP 和 WS 寻址
【发布时间】:2014-05-28 13:55:25
【问题描述】:

对于一个项目,我需要使用 WCF 服务(不是我创建的)。
我已经使用 gSoap 工具包创建了适当的类,一切都运行良好!

直到服务的开发者决定更新它并需要 WS-Addressing!

我已经使用soapUI 工具测试了该服务,为了获得响应,我需要检查WS-A 下的“添加默认wsa:To”选项。

我假设我需要在我的代码中做类似的事情。我阅读了有关使用 wsa 插件的信息,但找不到足够的说明。到目前为止我所做的是:

我用wsdl2h -o outfile.h url_to_service -t typemap.dat

在我输入的 typemap.dat 中:

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\
};

使用 soapcpp2 工具时,我收到一条错误消息:

wsa5.h(288):错误:远程方法名称冲突:struct/class 'SOAP_ENV__Fault' 已经在第 274 行声明

最后,当我尝试从我的代码中调用服务方法时(C++,不需要更改以前版本的任何内容,不需要 WS-A)程序冻结,我可以看到使用的内存增加到一个点( ~700MB),然后删除,程序保持冻结状态!

我使用的是 windows、VS2010 和 gSoap 2.8.17。
有人可以指出我如何添加 WSA 的正确方向吗?

提前谢谢你!

【问题讨论】:

    标签: c++ wcf soap gsoap ws-addressing


    【解决方案1】:

    我猜你正在混合几个版本的 WS-Addressing :

    在 gSOAP typemap.dat 我们可以看到:

    wsa = <http://schemas.xmlsoap.org/ws/2004/08/addressing>
    wsa3 = <http://schemas.xmlsoap.org/ws/2003/03/addressing>
    wsa4 = <http://schemas.xmlsoap.org/ws/2004/03/addressing>
    wsa5 = <http://www.w3.org/2005/08/addressing>
    

    如果在您的 wsdl 中定义了 WS-Addressing 标头,则其定义将在 typemap.dat 中没有自定义标头定义的情况下完成。我认为您应该删除 SOAP_ENV__Header 定义并添加由 wsa 插件管理的 wsa 命名空间的定义(如果不存在)。

    您可以从 gSOAP 文档 doc/wsa/html/index.html 和 wsa 插件示例 samples/wsa/wsademo.c 中找到有关 wsa 插件使用的信息。

    注意 gSOAP 插件是作为源文件提供的,因此您需要编译和链接 plugin/wsaapi.c 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 2010-10-04
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2011-07-06
      相关资源
      最近更新 更多