1>I compile “dfm-5.0.wsdl” (come from DFM SDK) and generate all soap files by using gsoap 2.7.9.
2> With the generated soap files, I made a simple program and try to retrieve info by accessing a DFM web service.
I can make regular DFM calls work, such as “LunListInfoIterStart”, “LunListInfoIterNext”, etc.
3> But when I call “ApiProxy” soap call, for exmaple, to run "system-get-info" on a storage controler,
it always returns error such as "Invalid tag" after a long time.
In debug mode, I checked soap's buffer, it has all returned infomation of "system-get-info".
But the info doesn't show up in ApiProxy's repsonse result.
The following is my simple code of calling "ApiProxy". Any suggestion:
int main (int argc, char *argv[])
{
if (argc < 4){
printf("Usage: %s {NMSDK Server URL} {Username} {Password}\n", argv[0]); return -1; }
else
printf("Connecting to NMSDK Server [%s] with user [%s].\n", argv[1], argv[2]);
std::string sURL = argv[1];
std::string sUsername = argv[2];
std::string sPassword = argv[3];
DfmBinding ClientSoap;
ClientSoap.soap->userid = soap_strdup(ClientSoap.soap, sUsername.c_str());
ClientSoap.soap->passwd = soap_strdup(ClientSoap.soap, sPassword.c_str());
ClientSoap.endpoint = sURL.c_str();
//memset(ClientSoap.soap->buf, 0, SOAP_BUFLEN);
ClientSoap.soap->recv_timeout = 20;
ClientSoap.soap->send_timeout = 20;
ClientSoap.soap->connect_timeout = 20;
ClientSoap.soap->accept_timeout = 20;
soap_ssl_init();
if (soap_ssl_client_context (ClientSoap.soap, SOAP_SSL_NO_AUTHENTICATION, NULL, NULL, NULL, NULL, NULL) != SOAP_OK){
printf("soap_ssl_client_context() failed."); }
int iRc;
printf("api-proxy: system-get-info\n");
printf("---------------------------------------------------------------------------:\n");
ClientSoap.soap->userid = soap_strdup(ClientSoap.soap, sUsername.c_str());
ClientSoap.soap->passwd = soap_strdup(ClientSoap.soap, sPassword.c_str());
_ns1__ApiProxy *apiProxy = soap_new__ns1__ApiProxy(ClientSoap.soap, -1);
apiProxy->Target.assign("netappone");
apiProxy->Request = soap_new_ns1__Request(ClientSoap.soap, -1);
apiProxy->Request->Name.assign("system-get-info");
apiProxy->Request->Args = soap_new__ns1__Request_Args(ClientSoap.soap, -1);
_ns1__ApiProxyResult *apiProxyResult = soap_new__ns1__ApiProxyResult(ClientSoap.soap, -1);
if ((iRc = ClientSoap.__ns1__ApiProxy(apiProxy, apiProxyResult)) == 0){
if(!apiProxyResult->Response->Status.compare("passed")) {
printf("---------------------------------------------------------------------------:\n");
} else
{
printf("-----------------------api-proxy call failed 1 -------------------------------:\n");
}
} else
{
printf("-----------------------api-proxy call failed 2 --------------:\n");
}
}