VC 关于用gSoap 做web service的开发,客户端传递字符串给服务器的问题

zgqiangha 2010-04-23 09:50:52
如题,现在遇到的问题是:client传递给server的字符串,server无法收到。

//client 代码
int SendMsg(const char* server,char** szMsgXml);
int main(int argc, char* argv[])
{
int result=-1;
char* server="http://localhost:4567";
if (argc<1)
{
printf("usage: %s sxMsgXml\n",argv[1]);
exit(0);
}
result=SendMsg(server,&argv[1]);//调用方法传递字符串给server
if (result<0)
{
printf("soap error!\n");
}
else
{
printf("now the szMsgXml is:%s\n",argv[1]);
}
system("pause");
return 0;
}
int SendMsg( const char* server,char** szMsgXml )
{
struct soap sendMsg_soap;
int result=0;
soap_init(&sendMsg_soap);
soap_call_ns__SendMsg(&sendMsg_soap,server,"",szMsgXml);
if (sendMsg_soap.error)//这里szMsgXml的值已经为空了
{
printf("\nsoap error:%d,%s,%s\n",sendMsg_soap.error,*soap_faultcode(&sendMsg_soap),*soap_faultstring(&sendMsg_soap));
result=sendMsg_soap.error;
}
soap_end(&sendMsg_soap);
soap_done(&sendMsg_soap);
return result;
}




//server 代码

int ns__SendMsg(struct soap*, char **szMsgXml)
{
//这里传进来的szMsgXml的值为空
printf("the xml content:%s\n",*szMsgXml);
return SOAP_OK;
}

请问各位这是什么问题?
...全文
608 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
arike1982 2010-06-25
  • 打赏
  • 举报
回复
是gsoap默认接口的最后一个变量为输出参数, 所以你的szMsgXml才传不进来, 网上可以找到没有输出参数的接口,我记不得了,你自己搜一下把
Proteas 2010-04-23
  • 打赏
  • 举报
回复
第一、是不是编码问题。
第二、截获请求,看看发出去没有。
踏实每一步 2010-04-23
  • 打赏
  • 举报
回复
应该需要创建服务端吧。
soap_serve(soap_new());
我没用过,只是猜测
zgqiangha 2010-04-23
  • 打赏
  • 举报
回复
进来的都有分!!
King030609 2010-04-23
  • 打赏
  • 举报
回复
占个位置
zgqiangha 2010-04-23
  • 打赏
  • 举报
回复
有人做过么?
zgqiangha 2010-04-23
  • 打赏
  • 举报
回复
终于走通了,在用soapcpp2.exe编译的时候,有个警告提醒了我:
**WARNING**: last output parameter of remote method function prototype 'SendMsg' is a pointer to a char which will only return one byte: use char** instead to return a string (detected at line 1 in E:\dev_file\WebService\sendMsg.h)
意思不用我多说,如果函数只有一个参数,它会默认把这个参数当做返回值。我把函数这么写就可以了
int ns__sendMsg(struct soap *sendMsg_soap,char* szMsgXml,char** returnMsg )
不过我在文档上也看到其它的情况,待深入研究后,再说。
结帖!
zgqiangha 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 qiangorqiang 的回复:]
把客户端和服务器端的
int ns__SendMsg(struct soap*, char **szMsgXml)
改成int ns__SendMsg(struct soap*, char *szMsgXml)
重新生成,看可以不。
[/Quote]
试过,也还是不行,不过我好像找到原因了,正在测试!
qiangorqiang 2010-04-23
  • 打赏
  • 举报
回复
把客户端和服务器端的
int ns__SendMsg(struct soap*, char **szMsgXml)
改成int ns__SendMsg(struct soap*, char *szMsgXml)
重新生成,看可以不。
p123p456 2010-04-23
  • 打赏
  • 举报
回复
有好资料让大家分享
zgqiangha 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yaoqian156 的回复:]
if (argc<1)
{
printf("usage: %s sxMsgXml\n",argv[1]);
exit(0);
}

不知道你为什么不调试,上面这段代码应该永远进不了,你把argc改为2吧,分拿来。
[/Quote]
我在project->setting上已经将参数写进去了,写的是端口号,可以往下走的。
yaoqian156 2010-04-23
  • 打赏
  • 举报
回复
if (argc<1)
{
printf("usage: %s sxMsgXml\n",argv[1]);
exit(0);
}

不知道你为什么不调试,上面这段代码应该永远进不了,你把argc改为2吧,分拿来。
zgqiangha 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yaoqian156 的回复:]
int main(int argc, char* argv[])

argc 是后面argc的数组的个数,一般而言,argc不会<1的,char* argv[]默认的值是你应用程序的名字。
比如你的程序是App,argc[0] = App.exe,所以你的argc[1],如果你没有在命令行中传值的话,这个值一直为NULL
[/Quote]
我已经传入了参数,我觉得关键问题,是传不过去字符串,如server端能收到,它是什么无所谓了
yaoqian156 2010-04-23
  • 打赏
  • 举报
回复
int main(int argc, char* argv[])

argc 是后面argc的数组的个数,一般而言,argc不会<1的,char* argv[]默认的值是你应用程序的名字。
比如你的程序是App,argc[0] = App.exe,所以你的argc[1],如果你没有在命令行中传值的话,这个值一直为NULL
zgqiangha 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qiangorqiang 的回复:]
char **szMsgXml
为何定义成指向指针的指针?
[/Quote]
如果是char *szMsgXml就连不上,client端会报错
zgqiangha 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 proteas 的回复:]
第一、是不是编码问题。
第二、截获请求,看看发出去没有。
[/Quote]
第一、目前跟编码还没有什么关系,因为server端压根连乱码都得到。
第二、server端检测到有程序连它,另外client端,我查看了请求返回值,没有错误
qiangorqiang 2010-04-23
  • 打赏
  • 举报
回复
char **szMsgXml
为何定义成指向指针的指针?
sofa120 2010-04-23
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20061226/09/5255893.html

不知道对你有没用。呵呵

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧