1

古い 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)) で問題なく処理されました。

4

1 に答える 1

0

auth.h の LoginResult を次のように変更する必要があります。

// login result struct
class ns__LoginResult
{
public:
    bool successful;
    xsd__string token;  // also used as error message if successful == false
    LoginResult();
};

また、ns_login( ) メソッドを次のように変更します。

int ns__login(xsd__string realm, int authmethod, LoginParameterArray params, ns__LoginResult &result);

結果の応答は次のようになります。

  <ns:LoginResult>
   <successful>false</successful>
   <token></token>
  </ns:LoginResult>

LoginResult が "ns" 名前空間に移動しても、あまり問題にならないことを願っています。

于 2013-04-04T20:58:27.987 に答える