簡體   English   中英

gSOAP-未設置SOAP操作標頭

[英]gSOAP - SOAP-Action Header not set

我有幾個WSDL文件,並使用gSOAP來創建C ++代碼。

為了生成代碼,使用了以下命令:

\path\to\wsdl2h -I \path\to\import\dir -j -N Service1Prefix -n Namespace1Prefix -o \path\to\output\header\dir\header1.h -q CPPNamespace1 -t \path\to\typemap.dat .\path\to\wsdl1.wsdl

其余的WSDL文件等等。 在gsoap文檔中,我讀到需要一個空的env.h文件來處理序列化和錯誤處理。 因此,我為此創建了一個空文件。

之后,我用soap2cpp工具為每個WSDL文件生成了C ++代碼:

\path\to\soap2cpp -1 -C -L -a -A -b -d \path\to\output\dir -i -j -I \path\to\import\dir -n -r -w -x \path\to\header\dir\header1.h

和env.h

\path\to\soap2cpp -1 -C -L -b -d \path\to\output\dir -j -I \path\to\import\dir -penv  -r -w -x \path\to\env.h

一切正常,我得到了C ++代碼。

我將其放入代碼中並嘗試了一種方法,但出現錯誤提示。

錯誤:WSWS3147E:錯誤:沒有SOAPAction標頭!

我試着擺弄wsdl2h和soap2cpp的參數,但沒有得到令人滿意的結果。 當我刪除前綴的參數時,設置了SOAPAction Header,但是當響應中包含一些名稱相同但內容不同的對象時,就會出現問題。

一些搜索沒有為我找到可行的解決方案。 你們中的某個人以前可能會遇到此問題並可以提供幫助嗎?

WSDL可能沒有在wsdl:binding / wsdl:operation / soap:operation / @ soapAction屬性中定義SOAP Action頭的情況,盡管這種可能性很小。 但是,如果是這種情況,或者在WSDL中沒有正確指定soapAction,並且您知道SOAP Action標頭應該是什么,那么您可以在調用服務時簡單地手動設置SOAP Action標頭,如下所示:

// create a service proxy object
SomeProxy proxy;
// invoke the service at an endpoint URL and SOAP Action, pass parameters:
if (proxy.someMethod("endpoint URL", "soap action", ...) == SOAP_OK)
  ... // got the results!

這會將SOAP Action HTTP標頭設置為作為第二個參數提供的字符串。 您可以將NULL用於端點和/或操作字符串,以使調用改為使用WSDL定義的端點和操作。

PS#1。 僅使用soapcpp2選項-j (首選)或-i ,但不要同時使用。

PS#2。 為什么不在所有組合的WSDL上運行wsdl2h? 最后,這節省了大量生成的代碼。 當將服務組合到一個大.h文件中時,無論如何用soapcpp2都會為WSDL中的服務分別生成服務代理類。 這樣,您還可以確保SOAP Header和SOAP Faults開箱即用。 說明:env.h應該定義從單獨生成的.h文件中提取的所有SOAP Header和SOAP Fault詳細信息結構,這可能很麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM