2017-05-20 10 views
1

gSoapを使用してONVIFカメラのWebサービスを構築しています。 私はhttps://www.onvif.org/profiles/specifications/でONVIFによって提供されるコアwdslを使用してヘッダファイルとソースファイルを生成しました。gSoap fault SOAP-ENV:MustUnderstand [サブコードなし]

はしかし、私はクライアントからの要求を行うたびに、私は機能soap_begin_serve(soap)で以下のエラーが出ます:

SOAP 1.2 fault SOAP-ENV:MustUnderstand[no subcode] 
"The data in element 'Security' must be understood but cannot be processed" 

上記のエラーは意味ないとどのように私はそれを修正することができますか?

EDIT:これは私がカメラ側で受信するものである:

POST/HTTP/1.1 
Content-Type: application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime" 
Host: localhost:8090 
Content-Length: 261 
Accept-Encoding: gzip, deflate 
Connection: Close 

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetSystemDateAndTime xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>POST/HTTP/1.1 
Content-Type: application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetScopes" 
Host: localhost:8090 
Content-Length: 905 
Accept-Encoding: gzip, deflate 
Connection: Close 

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><UsernameToken><Username>admin</Username><Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">WFz21zL8rch8LRoxAPzgHRMBbr0=</Password><Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">9y79ka0xD02oCIw6GAoIPwEAAAAAAA==</Nonce><Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2017-05-21T08:15:58.902Z</Created></UsernameToken></Security></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetScopes xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope> 
+0

UsernameToken/Securityヘッダーに問題があります。カメラに送信するSOAPメッセージを投稿できますか? – aminexplo

+0

は、カメラで受信したリクエストを掲載しました。 – thunderbird

+0

WS-Security用にgsoapを個別に設定する必要はありますか? – thunderbird

答えて

0

SOAP 1.2フォールトSOAP-ENV:mustUnderstand属性[なしサブコード] 「要素内のデータは、 'セキュリティ' は理解されなければならないが、

    :これは、あなたが認証するために、WS-Securityを有効にする必要がありますことを意味し、「

を処理することはできません

  • #import "wsse.h".hヘッダーファイル(別名。サービスおよびデータバインディング "インターフェースファイル")を使用して、soapcpp2を処理します。ソースコードに

  • 、ソースコードに​​

  • 、コンパイラフラグ-DWITH_OPENSSLでソースコードをコンパイルし、アプリケーションのコードベースをコンパイルsoap_wsse_add_UsernameTokenDigest(soap, NULL, "username", "password");

  • でリクエストを送信する前にユーザーの資格情報を提供plugin/wsseapi.cplugin/smdevp.c、およびplugin/mecevp.cpluginディレクトリはgSOAPディストリビューションパスにあります)、もちろんstdsoap2.cまたはstdsoap2.cppとその他の生成されたファイルもコンパイルします。

  • OpenSSL -lssl -lcryptoとのリンク、おそらく圧縮が必要な場合は-lzです。 gSOAP(デジタル署名および/または暗号化)との完全なWS-Securityのプラグイン機能を使用するときに

  • 、あなたはコンパイラオプション-DWITH_OPENSSL -DWITH_DOM -DWITH_GZIPですべてのソースコードをコンパイルしても、あなたのコードと一緒にdom.cまたはdom.cppをコンパイルする必要があります。

  • gSOAPのthe WS-Security pluginも参照してください。

    これが役に立ちます。