Bonjour,
je suis débutant en C++.
J'utilise C++ 6 Builder.
je dois interroger un webservice qu'une autre société à créé.
je l'interroge depuis Windev et il marche sans problème mais depuis le C++, le filtre ne marche pas, il ne tient pas compte de mon filtre " WHERE RequestID > 422 "
Je ne connais pas grand chose en XML donc je pense que le problème viendrai de l'entête XML
Voici les différences remarquées dans l'entête des 2 fichiers envoyés vers le webservice.
En WINDEV
Accept: */*
Connection: close
EN c++
Accept: text/xml
Connection: Keep-Alive
Est-ce que le problème vient de la? Le WebService n'interpretrait pas bien le fichier XML.
Si oui, comment le modifier.
Merci
Sébastien.
PS: Je suis obligé utilisé C++ car en Windev j'ai des problème d'accent dans d'autres fonctions
Voici le code C++ et les fichier XML créé et envoyé au WebService
//************************************************
ArrayOfRequestInfo ArrayReqInfo ;
RequestInfo* ReqInfo = new RequestInfo;
AnsiString Resultset;
//Déclare une interface d'accès au service
_di_WSRequestsSoap WSRequestsSoap;
//Acquérir l'interface vers le service désiré
WSRequestsSoap = GetWSRequestsSoap();
AnsiString filter;
filter = " WHERE RequestID > 422 " ;
WSRequestsSoap->ArrayReqInfo = WSRequestsSoap->GetRequests(filter);
for(int i = 0 ;i<ArrayReqInfo.get_length();i++)
{
ReqInfo = ArrayReqInfo[i];
Resultset = IntToStr(ReqInfo->RequestYear);
Resultset = Resultset + " - ";
Resultset = Resultset + IntToStr(ReqInfo->RequestSubId);
Resultset = Resultset + " - ";
Resultset = Resultset + IntToStr(ReqInfo->RequestSubId);
Resultset = Resultset + " - ";
Resultset = Resultset + ReqInfo->Applicant;
LBResult->Items->Add(Resultset);
}
//************************************************
//Class
//************************************************
class RequestInfo;
enum StatusEnum {
E,
T,
C,
B,
P
};
class StatusEnum_TypeInfoHolder : public TObject {
StatusEnum __instanceType;
public:
__published:
__property StatusEnum __propType = { read=__instanceType };
};
class RequestInfo : public TRemotable {
private:
int FRequestYear;
int FRequestId;
int FRequestSubId;
int FCustomerId;
AnsiString FApplicant;
TXSDateTime* FCreationDate;
TXSDateTime* FClosingDate;
StatusEnum FStatus;
AnsiString FRequest;
public:
__fastcall ~RequestInfo();
__published:
__property int RequestYear = { read=FRequestYear, write=FRequestYear };
__property int RequestId = { read=FRequestId, write=FRequestId };
__property int RequestSubId = { read=FRequestSubId, write=FRequestSubId };
__property int CustomerId = { read=FCustomerId, write=FCustomerId };
__property AnsiString Applicant = { read=FApplicant, write=FApplicant };
__property TXSDateTime* CreationDate = { read=FCreationDate, write=FCreationDate };
__property TXSDateTime* ClosingDate = { read=FClosingDate, write=FClosingDate };
__property StatusEnum Status = { read=FStatus, write=FStatus };
__property AnsiString Request = { read=FRequest, write=FRequest };
};
typedef DynamicArray<RequestInfo*> ArrayOfRequestInfo; // //
__interface INTERFACE_UUID("{B5B5E398-73D6-8A45-B9DB-6311C904196A}") WSRequestsSoap : public IInvokable
{
public:
virtual bool AddRequest(const RequestInfo* requestInfo) = 0;
virtual bool UpdateRequest(const RequestInfo* requestInfo) = 0;
virtual bool DeleteRequest(const int requestYear, const int requestId, const int requestSubId) = 0;
virtual ArrayOfRequestInfo GetRequests(const AnsiString filter) = 0;
virtual RequestInfo* GetRequest(const int requestYear, const int requestId, const int requestSubId) = 0;
};
typedef DelphiInterface<WSRequestsSoap> _di_WSRequestsSoap;
_di_WSRequestsSoap GetWSRequestsSoap(bool useWSDL=false, AnsiString addr="");
//************************************************
// FIN CLASSE
//************************************************
Résultat grâce à un sniffer:
fichier xml envoyé depus WINDEV:
POST /modules/CustomersRequests/WSRequests.asmx HTTP/1.1
Content-Length: 420
Content-Type: text/xml
Accept: */*
Host: www.MonSite.com
User-Agent: PC SOFT Framework
Connection: close
SOAPAction: "
[ Lien ]"
<SOAP-ENV:Envelope xmlns:SOAP-ENV="
[ Lien ]"
xmlns:xsi="
[ Lien ]"
xmlns:xsd="
[ Lien ]">
<SOAP-ENV:Body>
<GetRequests xmlns="
[ Lien ]"
SOAP-ENV:encodingStyle="
[ Lien ]">
<filter xsi:type="xsd:string"> WHERE RequestID > 422 </filter>
</GetRequests>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
fichier xml envoyé depuis C++:
POST /modules/customersrequests/wsrequests.asmx HTTP/1.1
Accept: text/xml
SOAPAction: "
[ Lien ]"
Content-Type: text/xml
User-Agent: Borland SOAP 1.1
Host: www.MonSite.com
Content-Length: 514
Connection: Keep-Alive
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="
[ Lien ]"
xmlns:xsd="
[ Lien ]"
xmlns:xsi="
[ Lien ]"
xmlns:SOAP-ENC="
[ Lien ]">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="
[ Lien ]">
<NS1:GetRequests xmlns:NS1="
[ Lien ]">
<filter xsi:type="xsd:string"> WHERE RequestID > 422 </filter>
</NS1:GetRequests>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>