2012-01-07 18 views
0

トークンを返さなければならないloginという関数を定義しました。gSoap C++ - C#デシリアライゼーションの問題

AuthenticationServiceClient a = new AuthenticationServiceClient(); 
Login login = new Login(); 
login.user = "test"; 
login.password = "test"; 
LoginResponse lr = a.login(login); 

string securityId = lr.token.sessionId 

問題はsecuirtyIdがNULLであることである:トークンは、私はこれへの呼び出しを持つクライアント側で

SOAP_FMAC5 int SOAP_FMAC6 __afas__login(struct soap* env, afas__Login *afas__login, afas__LoginResponse *afas__loginResponse) 
{ 

    int ret = ServiceApp::GetServiceApp()->GetServiceImpl()->login(afas__login->user, afas__login->password); 

    afas__loginResponse->error = soap_new_afas__Error(env, -1); 
    afas__loginResponse->af__token = soap_new_af__Token(env, -1); 

    if (ret == sERROR) 
    { 
     afas__loginResponse->error->code = afas__ErrorCode__NOTLOGGEDIN; 
    } 
    else 
    { 
     afas__loginResponse->error->code = afas__ErrorCode__SUCCESS; 

     afas__loginResponse->af__token->sessionId = soap_strdup(env, soap_int2s(env, ret)); 
     afas__loginResponse->af__token->securityId = soap_strdup(env, afas__login->password); 

     afas__loginResponse->af__token->userName = soap_strdup(env, afas__login->user); 
    } 

    return SOAP_OK; 

} 

char *型であるセキュリティIDを持っています。どういうわけかそれはデシリアライズされません。 一方、整数であるエラーコードは正しくデシリアライズされます。

提案がありますか?

答えて

0

問題はwsdlファイルから発生します。私が見つけたのgSOAPのドキュメントを見て:デフォルトの名前空間は、「:バーURN」であるので、名前空間:最後の例では

http://www.cs.fsu.edu/~engelen/soapfaq.html

<x:foo xmlns:x="urn:foo" xmlns="urn:bar"> 
    <bar></bar> 
</x:foo> 

バー要素は、「バーURN」に属しています。 Visual Studio .NET 2003のWSDLインポートでは、レスポンス要素に2番目の名前空間にstruct型の要素が含まれていると、複数の名前空間の状況からデータを正常に非直列化できませんでした。要素フォームのデフォルトの「修飾」が定義されるまで、構造体の個々のメンバーは.NET側で無視されました。

したがって、attributeFormDefault = "qualified"とelementFormDefault = "qualified"を設定すると、シリアル化の問題が修正されました。