关于VC++调用webservice时遇到的问题。

放开那虎妞 2014-01-21 08:54:54
各位过路的大神,我是webservice菜鸟,遇到了一个问题,我使用VC++调用webservice时,有一个本地的webservice的wsdl文件,我已经生成了几个.h和.cpp文件,但是当我调用webservice中的函数的时候,显示:这个函数未声明,我不知道怎么回事,我是按照这个地址上面配置的。
http://www.cnblogs.com/sambird/p/3181373.html
我也取消了文章上面的那三个文件的预编译头,还请各位帮帮忙。
...全文
141 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
放开那虎妞 2014-01-21
  • 打赏
  • 举报
回复
引用 10 楼 zhuyf87 的回复:
[quote=引用 8 楼 wxd1024917 的回复:] [quote=引用 7 楼 zhuyf87 的回复:] gSoap?那篇博客我也看过,用的时候没出现问题。 生成的头文件里面没声明getInputorUser吗
生成的头文件有声明啊,我也是先生成和wsdl名字一样的.h文件,然后再生成下面一堆的.h和.cpp文件,拷进去之后,取消了那三个文件的预编译头,自己自己又在原先的程序上添加了一个类,然后在这个类里面调用soap...proxy.cpp里面的函数,就显示上面的错误,说函数未声明,我在这个新的类里面添加soap...proxy.h也不行。[/quote] 你是在自己新定义的class里面调用getInputorUser?IFXCZFAPIHttpBindingProxy::getInputorUser, getInputorUser是IFXCZFAPIHttpBindingProxy类的成员函数,你不会是直接调用的getInputorUser吧? 不是通过IFXCZFAPIHttpBindingProxy类型的对象调用的吗?[/quote]
引用 11 楼 zhuyf87 的回复:
看了一下上面你的代码,你好象是直接调用的getInputorUser。它可不是全局函数啊,而是IFXCZFAPIHttpBindingProxy的成员函数,要通过对象来调用的吧。
是的,谢谢你们了,我知道了,我不生成C++包装就可以调用了。
放开那虎妞 2014-01-21
  • 打赏
  • 举报
回复
谢谢各位的帮忙,我已经搞定了,原因就是我按照我贴的地址上面,生成文件的时候使用了-i(生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)),这样就会导致我无法调用客户端类的成员函数,不添加这一个的话就可以调用了,谢谢各位的帮忙啊。
zhuyf87 2014-01-21
  • 打赏
  • 举报
回复
看了一下上面你的代码,你好象是直接调用的getInputorUser。它可不是全局函数啊,而是IFXCZFAPIHttpBindingProxy的成员函数,要通过对象来调用的吧。
zhuyf87 2014-01-21
  • 打赏
  • 举报
回复
引用 8 楼 wxd1024917 的回复:
[quote=引用 7 楼 zhuyf87 的回复:] gSoap?那篇博客我也看过,用的时候没出现问题。 生成的头文件里面没声明getInputorUser吗
生成的头文件有声明啊,我也是先生成和wsdl名字一样的.h文件,然后再生成下面一堆的.h和.cpp文件,拷进去之后,取消了那三个文件的预编译头,自己自己又在原先的程序上添加了一个类,然后在这个类里面调用soap...proxy.cpp里面的函数,就显示上面的错误,说函数未声明,我在这个新的类里面添加soap...proxy.h也不行。[/quote] 你是在自己新定义的class里面调用getInputorUser?IFXCZFAPIHttpBindingProxy::getInputorUser, getInputorUser是IFXCZFAPIHttpBindingProxy类的成员函数,你不会是直接调用的getInputorUser吧? 不是通过IFXCZFAPIHttpBindingProxy类型的对象调用的吗?
lvxinjian_cn 2014-01-21
  • 打赏
  • 举报
回复
引用 6 楼 wxd1024917 的回复:
引用 5 楼 lvxinjian_cn 的回复:
我以前编写过webservice程序,基本上都差不多,也是先下载最新gsoap包,然后通过gsoap调用webservice,都是那几步,没什么特别的,唯一不好弄得就是参数配置。当时折腾了我三天,我的经验是既然你要调用人家的webservice,一般人家都会提供调用例子,你用抓包程序跟踪一下他们提供的例子,然后再比较自己的例子哪里不一样,就知道问题了。
我下载的不是最新的gsoap包,行不行呢?配置参数是怎么配置法?
找他们的调用例子啊。
放开那虎妞 2014-01-21
  • 打赏
  • 举报
回复
引用 7 楼 zhuyf87 的回复:
gSoap?那篇博客我也看过,用的时候没出现问题。 生成的头文件里面没声明getInputorUser吗
生成的头文件有声明啊,我也是先生成和wsdl名字一样的.h文件,然后再生成下面一堆的.h和.cpp文件,拷进去之后,取消了那三个文件的预编译头,自己自己又在原先的程序上添加了一个类,然后在这个类里面调用soap...proxy.cpp里面的函数,就显示上面的错误,说函数未声明,我在这个新的类里面添加soap...proxy.h也不行。
zhuyf87 2014-01-21
  • 打赏
  • 举报
回复
gSoap?那篇博客我也看过,用的时候没出现问题。 生成的头文件里面没声明getInputorUser吗
放开那虎妞 2014-01-21
  • 打赏
  • 举报
回复
引用 5 楼 lvxinjian_cn 的回复:
我以前编写过webservice程序,基本上都差不多,也是先下载最新gsoap包,然后通过gsoap调用webservice,都是那几步,没什么特别的,唯一不好弄得就是参数配置。当时折腾了我三天,我的经验是既然你要调用人家的webservice,一般人家都会提供调用例子,你用抓包程序跟踪一下他们提供的例子,然后再比较自己的例子哪里不一样,就知道问题了。
我下载的不是最新的gsoap包,行不行呢?配置参数是怎么配置法?
lvxinjian_cn 2014-01-21
  • 打赏
  • 举报
回复
我以前编写过webservice程序,基本上都差不多,也是先下载最新gsoap包,然后通过gsoap调用webservice,都是那几步,没什么特别的,唯一不好弄得就是参数配置。当时折腾了我三天,我的经验是既然你要调用人家的webservice,一般人家都会提供调用例子,你用抓包程序跟踪一下他们提供的例子,然后再比较自己的例子哪里不一样,就知道问题了。
穿跑鞋不跑步 2014-01-21
  • 打赏
  • 举报
回复
不用,你看看头文件、名字空间什么的有没有冲突。
放开那虎妞 2014-01-21
  • 打赏
  • 举报
回复
函数是这样的。
int IFXCZFAPIHttpBindingProxy::getInputorUser(const char *endpoint, const char *soap_action, _ns1__getInputorUser *ns1__getInputorUser, _ns1__getInputorUserResponse *ns1__getInputorUserResponse)
{	struct soap *soap = this;
	struct __ns1__getInputorUser soap_tmp___ns1__getInputorUser;
	if (endpoint)
		soap_endpoint = endpoint;
	if (!soap_endpoint)
		soap_endpoint = "http://10.118.153.249/fxczfWebService.ws";
	if (!soap_action)
		soap_action = "";
	soap->encodingStyle = NULL;
	soap_tmp___ns1__getInputorUser.ns1__getInputorUser = ns1__getInputorUser;
	soap_begin(soap);
	soap_serializeheader(soap);
	soap_serialize___ns1__getInputorUser(soap, &soap_tmp___ns1__getInputorUser);
	if (soap_begin_count(soap))
		return soap->error;
	if (soap->mode & SOAP_IO_LENGTH)
	{	if (soap_envelope_begin_out(soap)
		 || soap_putheader(soap)
		 || soap_body_begin_out(soap)
		 || soap_put___ns1__getInputorUser(soap, &soap_tmp___ns1__getInputorUser, "-ns1:getInputorUser", NULL)
		 || soap_body_end_out(soap)
		 || soap_envelope_end_out(soap))
			 return soap->error;
	}
	if (soap_end_count(soap))
		return soap->error;
	if (soap_connect(soap, soap_endpoint, soap_action)
	 || soap_envelope_begin_out(soap)
	 || soap_putheader(soap)
	 || soap_body_begin_out(soap)
	 || soap_put___ns1__getInputorUser(soap, &soap_tmp___ns1__getInputorUser, "-ns1:getInputorUser", NULL)
	 || soap_body_end_out(soap)
	 || soap_envelope_end_out(soap)
	 || soap_end_send(soap))
		return soap_closesock(soap);
	if (!ns1__getInputorUserResponse)
		return soap_closesock(soap);
	ns1__getInputorUserResponse->soap_default(soap);
	if (soap_begin_recv(soap)
	 || soap_envelope_begin_in(soap)
	 || soap_recv_header(soap)
	 || soap_body_begin_in(soap))
		return soap_closesock(soap);
	ns1__getInputorUserResponse->soap_get(soap, "ns1:getInputorUserResponse", "");
	if (soap->error)
		return soap_recv_fault(soap, 0);
	if (soap_body_end_in(soap)
	 || soap_envelope_end_in(soap)
	 || soap_end_recv(soap))
		return soap_closesock(soap);
	return soap_closesock(soap);
}
放开那虎妞 2014-01-21
  • 打赏
  • 举报
回复
引用 1 楼 ftd2013 的回复:
我用vs2005没问题,vc++倒是没用过。你截个图看看。。

在调用webservice函数的时候是不是要引入什么库啊?错误的就是这样的,getInputorUser是webservice的函数。
穿跑鞋不跑步 2014-01-21
  • 打赏
  • 举报
回复
我用vs2005没问题,vc++倒是没用过。你截个图看看。。

16,548

社区成员

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

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

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