Ik ben momenteel bezig met het bouwen van een logging functionaliteit in een bestaande c++ applicatie. De gegevens moeten worden gelogd naar een andere server middels een webservice. Nu heb ik de ballen verstand van C++ en ben al tot de volgende code gekomen:
Deze code werkt deels. Dat wil zeggen: de webservice wordt gevonden. Wanneer de url wordt veranderd, geeft de applicatie een foutmelding, dus de url is goed.
De webmethod wordt echter niet uitgevoerd. Deze zou een regeltje moeten wegschrijven naar een tekstbestand, maar dit gebeurt niet.
De webmethod heet greet, en heeft 1 parameter: Een string
Wat kan hier fout zijn?
C++:
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
73
74
| #include <stdio.h> #include <iostream.h> #include <atlbase.h> #import "msxml3.dll" using namespace MSXML2; #import "C:\Program Files\Common Files\MSSoap\Binaries\MSSOAP1.dll" \ exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", \ "_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME") using namespace MSSOAPLib; void main() { BSTR method = L"Greet"; BSTR command = L"uri:Greet"; BSTR m = L"m"; try { CoInitialize(NULL); ISoapSerializerPtr Serializer; ISoapReaderPtr Reader; ISoapConnectorPtr Connector; // Connect to the service Connector.CreateInstance(__uuidof(HttpConnector)); // Begin message Connector->Property["EndPointURL"] = "http://<blaat>/TestLogWebService/LogService.asmx"; Connector->Connect(); Connector->Property["SoapAction"] = "uri:Greet"; Connector->BeginMessage(); // Create the SoapSerializer Serializer.CreateInstance(__uuidof(SoapSerializer)); // Connect the serializer to the input stream of the connector Serializer->Init(_variant_t((IUnknown*)Connector->InputStream)); // Build the SOAP Message Serializer->startEnvelope("", "", ""); Serializer->startBody(""); Serializer->startElement("Greet","uri:Greet","",m); //Serializer->startElement("username","","",""); Serializer->writeString("Richard"); // Serializer->endElement(); Serializer->endElement(); Serializer->endBody(); Serializer->endEnvelope(); // Send the message to the web service Connector->EndMessage(); // Read the response Reader.CreateInstance(__uuidof(SoapReader)); // Connect the reader to the output stream of the connector Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), ""); // Display the result printf("Answer: %s\n", (const char *)Reader->RPCResult->text); // CoUninitialize(); } catch (char * fout) { printf(fout); } } |
Deze code werkt deels. Dat wil zeggen: de webservice wordt gevonden. Wanneer de url wordt veranderd, geeft de applicatie een foutmelding, dus de url is goed.
De webmethod wordt echter niet uitgevoerd. Deze zou een regeltje moeten wegschrijven naar een tekstbestand, maar dit gebeurt niet.
De webmethod heet greet, en heeft 1 parameter: Een string
Wat kan hier fout zijn?