初学gsoap 简单接口问题

hufeng3318 发布于 2012/12/26 20:06
阅读 3K+
收藏 0
各位高手们,本人初学gsoap,遇到一些问题,请帮忙看看


我参照gsoap中samples里面的例子,写了一个接口
int ns__GetCamInfo(std::string caminfo,std::string& bcaminfo);
我想在接口里给bcaminfo传输值,直接赋值如下:
int ns__GetCamInfo(std::string caminfo,std::string& bcaminfo)
{
   bcaminfo = caminfo + ",Hello!";
}
为什么在客户端调用这个接口之后 , bcaminfo不能成功取值啊?
或者谁能告诉我 接口里怎样做才能成功实现呢?

以下是问题补充:

@hufeng3318:接口返回ok,没有错误,就是打印出来的bcaminfo值还是为空。 (2012/12/27 09:08)
加载中
0
陈舵主
陈舵主

gsoap有c++和c语言调用2种方式,你这种是c语言的,不过c语言中怎么会用到string?

如果你的代码是c++,不要这么用gsoap

hufeng3318
hufeng3318
哦,是吗。我要用的是c++的方式
0
平安北京
我只生成过客户端代码,没写过服务端,帮顶
0
平原君
平原君
你这个也没有详细的错误说明,很难说清楚是怎么回事
0
jingweiyoung
jingweiyoung
gdb+抓包。先确定是服务端还是客户端的问题...
0
hufeng3318
hufeng3318

很惭愧 菜鸟不会gdb调试 代码如下:

.h文件

//gsoap ns service name: Platform
//gsoap ns service style: rpc
//gsoap ns service namespace: http://192.168.1.227:9000/Platform.wsdl
//gsoap ns service location: http://192.168.1.227:9000
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:Platform


int ns__GetCamInfo(std::string caminfo,std::string& bcaminfo);


server端:

#include "soapH.h"
#include "Platform.nsmap"



int main(int argc,char *argv[])
{
        int m,s;
        struct soap platform_soap;
        soap_init(&platform_soap);
        if(argc < 2)
        {
                printf("usage: %s <server_port> /n",argv[0]);
                exit(1);
        }
        else
        {

                  m = soap_bind(&platform_soap, NULL, atoi(argv[1]), 100);
                if( m < 0)
                {
                         soap_print_fault(&platform_soap, stderr);
                         exit(-1);
                }


                fprintf(stderr, "Socket connection successful: master socket = %d/n", m);
                for(;;)
                {
                        s = soap_accept(&platform_soap);
                        if(s < 0)
                        {
                                soap_print_fault(&platform_soap, stderr);
                                exit(-1);
                        }


                        fprintf(stderr, "Socket connection successful: slave socket = %d/n", s);
                        soap_serve(&platform_soap);//该句说明该server的服务
                        soap_end(&platform_soap);
               }
        }
        return 0;
}


int GetCamInfo(struct soap *platform_soap,string caminfo,string& bcaminfo)
{
     bcaminfo = caminfo + ",Hello!";
    return SOAP_OK;
}


client端:

int mint GetCamInfo(char *server,string caminfo,string& bcaminfo);

int GetCamInfo(char *server,string caminfo,string& bcaminfo)
{
        int result=0;
        struct soap client_soap;
        soap_init(&client_soap);
        soap_set_namespace(&client_soap,namespace);

        soap_call_ns__GetCamInfo(&client_soap, server, "", caminfo,bcaminfo);
    
        if(client_soap.error)
        {
                printf("soap error:%d, %s, %s ", client_soap.error, *soap_faultcode(&client_soap), *soap_faultstring(&client_soap));
                result = client_soap.error;
        }
        soap_end(&client_soap);
        soap_done(&client_soap);


        return result;
}


int main(int argc,char *argv[])
{
        int result=-1;
        char server[30]="http://192.168.1.226:9000";
        string caminfo("99_000026_00000000000001");
        string bcaminfo("");


        result=GetCamInfo(server,caminfo,bcaminfo);


        if(result != 0)
        {
                printf("soap err, errcode = %d \n", result);
        }
        else
        {
                printf("------------%s\n",bcaminfo.c_str());
        }
        return 0;
}
这么简单的代码 有什么问题吗?
0
陈舵主
陈舵主
//client
#include "soapSmsWBSProxy.h"
#include "SmsWBS.nsmap"
#define PORT 10003

int main(int argc, char **argv)
{
        int result = -1;

        int num1 = 1;
        int num2 = 2;
        int sum = 0;

				struct soap soap;
				soap_init(&soap);
				//soap_init2(&soap,SOAP_IO_KEEPALIVE,SOAP_IO_KEEPALIVE);
				soap.connect_timeout=2;
				soap.send_timeout=2;
				soap.recv_timeout=2;

        SmsWBSProxy  sms(soap);
        sms.soap_endpoint = "http://172.22.6.59:10004";
        result = sms.add(num1, num2, &sum);
        if (result != 0)
        {
                printf("soap err, errcode = %d \n", result);
        }
        else
        {
                printf("%d + %d = %d \n", num1, num2, sum);
        }

        return 0;
}
0
陈舵主
陈舵主
//service
#include "soapSmsWBSService.h"
#include "SmsWBS.nsmap"
#define PORT 10004
int main(int argc, char **argv)
{ 
 SmsWBSService sms;

  if (!PORT)
  { 
   fprintf(stderr, "Usage: SmsWBSserver++ \n");
   exit(0);
  }

  /* run iterative server on port until fatal error */
  if (sms.run(PORT))
  { 
   sms.soap_stream_fault(std::cerr);
   exit(-1);
  }
 

 return 0;
}

int SmsWBSService::add(int num1, int num2, int *sum)
{
 *sum = num1 + num2;
 sleep(5);
 return SOAP_OK;
}
0
hufeng3318
hufeng3318
确实是用法错了,用c++的方式就可以了。太菜了。。。。
返回顶部
顶部