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

放开那虎妞 2014-01-21 08:54:54
各位过路的大神,我是webservice菜鸟,遇到了一个问题,我使用VC++调用webservice时,有一个本地的webservice的wsdl文件,我已经生成了几个.h和.cpp文件,但是当我调用webservice中的函数的时候,显示:这个函数未声明,我不知道怎么回事,我是按照这个地址上面配置的。
http://www.cnblogs.com/sambird/p/3181373.html
我也取消了文章上面的那三个文件的预编译头,还请各位帮帮忙。
...全文
108 点赞 收藏 13
写回复
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++倒是没用过。你截个图看看。。
回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7893

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告