IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Consommation web service en visual C++ (2005)


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Par défaut Consommation web service en visual C++ (2005)
    Bonjour,
    J'ai besoin d'un petit coup de pouce : j'ai importé une référence web de notre ERP (Sage X3) dans mon logiciel sous VS2005. Jusque là pas de problèmes : les tests ont été concluants mais en production j'ai un phénomène que je n'arrive pas à élucider (1 à 2% des cas)
    J'ai une fonction save (générée en auto) qui crée un enregistrement dans une base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    template <typename TClient>
    inline HRESULT CCAdxWebServiceXmlCCServiceT<TClient>::save(
    		CAdxCallContext callContext, 
    		BSTR publicName, 
    		BSTR objectXml, 
    		CAdxResultXml* saveReturn
    	)
    {
        if ( saveReturn == NULL )
    		return E_POINTER;
     
    	HRESULT __atlsoap_hr = InitializeSOAP(NULL);
    	if (FAILED(__atlsoap_hr))
    	{
    		SetClientError(SOAPCLIENT_INITIALIZE_ERROR);
    		return __atlsoap_hr;
    	}
     
    	CleanupClient();
     
    	CComPtr<IStream> __atlsoap_spReadStream;
    	__CCAdxWebServiceXmlCCService_save_struct __params;
    	memset(&__params, 0x00, sizeof(__params));
    	__params.callContext = callContext;
    	__params.publicName = publicName;
    	__params.objectXml = objectXml;
     
    	__atlsoap_hr = SetClientStruct(&__params, 10);
    	if (FAILED(__atlsoap_hr))
    	{
    		SetClientError(SOAPCLIENT_OUTOFMEMORY);
    		goto __skip_cleanup;
    	}
     
    	__atlsoap_hr = GenerateResponse(GetWriteStream());
    	if (FAILED(__atlsoap_hr))
    	{
    		SetClientError(SOAPCLIENT_GENERATE_ERROR);
    		goto __skip_cleanup;
    	}
     
    	__atlsoap_hr = SendRequest(_T("SOAPAction: \"\"\r\n"));
    	if (FAILED(__atlsoap_hr))
    	{
    		goto __skip_cleanup;
    	}
    	__atlsoap_hr = GetReadStream(&__atlsoap_spReadStream);
    	if (FAILED(__atlsoap_hr))
    	{
    		SetClientError(SOAPCLIENT_READ_ERROR);
    		goto __skip_cleanup;
    	}
     
    	// cleanup any in/out-params and out-headers from previous calls
    	Cleanup();
    	__atlsoap_hr = BeginParse(__atlsoap_spReadStream);
    	if (FAILED(__atlsoap_hr))
    	{
    		SetClientError(SOAPCLIENT_PARSE_ERROR);
    		goto __cleanup;
    	}
     
    	*saveReturn = __params.saveReturn;
    	goto __skip_cleanup;
     
    __cleanup:
    	Cleanup();
    __skip_cleanup:
    	ResetClientState(true);
    	memset(&__params, 0x00, sizeof(__params));
    	return __atlsoap_hr;
    }
    qui me renvoie une erreur alors que la création s'est bien passée!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    hr = service.save(Context, CComBSTR(L"ZPALETTE").Detach(), requete, &result2);
            if (FAILED(hr))
    		{
    _com_error err(hr);
    LPCTSTR errMsg = err.ErrorMessage();
    errMsg : Erreur non spécifiée (0x80004005)
    un message d'erreur comme on les aime... J'ai horodaté 2 messages : 1 avant l'appel et l'autre immédiatement après pour mettre en évidence un timeout mais la fonction s'exécute dans la seconde!
    Avez-vous une piste pour que je puisse avancer?

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Vous pouvez pas débugger ???

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Par défaut
    Bonjour et merci de votre réponse! Si cela se passait systématiquement : ça serait trop facile... c'est très aléatoire...

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Bin, suffit de configurer le débugger pour interrompre le debugee quand un exception du type en cause est lancé.
    Si c'est quand production, utilisez des outils de dump comme DrWatson ou ADPlus.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Par défaut
    A force de mettre des traces, c'est un timeout automatique (10s) dans le atlsoap.h. Quand on dépasse ce timeout : erreur inconnue...

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    D'où l'intérêt d'utiliser le débuggeur et pas des traces.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Consommation Web Service en RPG
    Par parzifal dans le forum AS/400
    Réponses: 1
    Dernier message: 10/12/2010, 21h27
  2. Client .Net consommant web service en php
    Par Tsubasa dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 05/05/2007, 09h58
  3. Réponses: 2
    Dernier message: 25/04/2006, 10h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo