古い gsoap バージョンから gsoap 2.8.14 に移行する必要がある cgi があります。残念ながら、反応は同じではありません。//gsoap ns schema form: unqualified をヘッダーに追加しましたが、すべての ns プレフィックスを取り除くには十分ではありませんでした。次に、おそらく主な問題は、応答の命名です。さらに LoginResult は、loginResponse で result および packet と呼ばれるようになりました。
古い cgi からの応答:
<LoginResult>
<successful>true</successful>
<token>example</token>
</LoginResult>
新しい cgi からの応答
<ns:loginResponse>
<result>
<successful>true</successful>
<token>example</token>
</result>
</ns:loginResponse>
私はsoapcpp2 -e -S auth.hでスタブを構築します
auth.h は次のようになります。
//gsoap ns service name: auth
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns service port: http://domain.xy/cgi-bin/auth.cgi
//gsoap ns service namespace: urn:auth
//gsoap ns schema form: unqualified
typedef std::string xsd__string;
// array of strings containing all tags allowed for a specific user
class TagsArray
{
public:
xsd__string *__ptr;
int __size;
TagsArray();
};
// getTags.... result struct
class TagsResult
{
public:
bool successful;
xsd__string errorMessage;
TagsArray tags;
TagsResult();
};
// login result struct
class LoginResult
{
public:
bool successful;
xsd__string token; // also used as error message if successful == false
LoginResult();
};
// verify result struct
class VerifyResult
{
public:
bool successful;
xsd__string newToken; // also used as error message if successful == false
VerifyResult();
};
// contains a valid auth method for a specific realm
class ns__AuthMethod
{
public:
int id;
xsd__string description;
};
// array of all allowed authmethods for a specific realm
class AuthMethodArray
{
public:
ns__AuthMethod *__ptr;
int __size;
};
// a login parameter, usually username, pin, token
class ns__LoginParameter
{
xsd__string param;
xsd__string value;
};
// array of all submitted login parameters, depending on the authmethod that is used
class LoginParameterArray
{
public:
ns__LoginParameter *__ptr;
int __size;
};
// retrieve all possible authmethods for a specific realm
int ns__getAuthMethods(xsd__string realm, xsd__string user, AuthMethodArray &result);
// login and retrieve a valid token if succeeded
int ns__login(xsd__string realm, int authmethod, LoginParameterArray params, LoginResult &result);
// verify a existing token
int ns__verifyToken(xsd__string realm, xsd__string token, VerifyResult &result);
何か案が?ありがとう。
----------------- 05.04.2013 --------------- ありがとうデイブ!
行われた変更:
- デイブによって提案された ns__ 接頭辞
- コンストラクターを削除しました
ブール値のデフォルト値を false に設定
// ログイン結果 struct class ns_ LoginResult { public: bool successfully = false; xsd _string トークン; // 成功した場合はエラー メッセージとしても使用 == false
};
結果は次のようになります。
<ns:LoginResult>
<successful>true</successful>
<token>example</token>
</ns:LoginResult>
int ns__login(xsd__string realm, int authmethod, LoginParameterArray params, ns__LoginResult &result);
ns: プレフィックスはすべてのクライアント (php、.net、c++(qt)) で問題なく処理されました。