先抄一段介绍性的话:gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出SOAP/XML的服务器端和客户端。由于 gSOAP具 有相当不错的兼容性,通过gSOAP,我们就可以调用由Java, .Net, Delhpi, PHP等语言开发的SOAP服务,或者向它们提供SOAP服务。
据说这个很牛逼,但是对于中文字符的支持并不好,所以现在项目转到用SOAP来实现,也在学习中。有用过的大侠们么,加我QQ378717567~
现在现在网上转帖一篇帖子,
| 2 | 建立c#的webservice,建立asp.net的web服务工程,写入代码,过程之前的文档写过,这里不再重复。代码如下: | ||||||||||
| using System; | |||||||||||||
| using System.Collections.Generic; | |||||||||||||
| using System.Linq; | |||||||||||||
| using System.Web; | |||||||||||||
| using System.Web.Services; | |||||||||||||
| /// <summary> | |||||||||||||
| /// WebService の概要の説明です | |||||||||||||
| /// </summary> | |||||||||||||
| [WebService(Namespace = "http://tempuri.org/")] | |||||||||||||
| [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] | |||||||||||||
| // この Web サービスを、スクリプトから ASP.NET AJAX を使用して呼び出せるようにするには、次の行のコメントを解除します。 | |||||||||||||
| // [System.Web.Script.Services.ScriptService] | |||||||||||||
| public class WebService : System.Web.Services.WebService { | |||||||||||||
| public WebService () { | |||||||||||||
| //デザインされたコンポーネントを使用する場合、次の行をコメントを解除してください | |||||||||||||
| //InitializeComponent(); | |||||||||||||
| } | |||||||||||||
| [WebMethod] | |||||||||||||
| public string HelloWorld() { | |||||||||||||
| return "Hello World"; | |||||||||||||
| } | |||||||||||||
| [WebMethod(Description = "计算a+b=sum的功能")] | |||||||||||||
| public int Add(int a, int b) | |||||||||||||
| { | |||||||||||||
| return a + b; | |||||||||||||
| } | |||||||||||||
| [WebMethod(Description = "显示问候语的功能")] | |||||||||||||
| public string Show(string yourname) | |||||||||||||
| { | |||||||||||||
| return "popular" + "欢迎" + yourname; | |||||||||||||
| } | |||||||||||||
| [WebMethod(Description = "AddNumbers")] | |||||||||||||
| public string AddNumbers(string NumberOne, string NumberTwo) | |||||||||||||
| { | |||||||||||||
| return "value:"+NumberOne+" "+NumberTwo;//NumberOne + NumberTwo + "hehe"; | |||||||||||||
| } | |||||||||||||
| } | |||||||||||||
| 3 | 客户端将来需用到wsdl文件,这里用到的是.net的webservice | ||||||||||||
| 在.NET中三种方式生成WSDL的方法 | |||||||||||||
| 1.在Web Service的URL后面加上WDSL需求,如下: | |||||||||||||
| http://localhost/webExamples/simpleService.asmx?WSDL | |||||||||||||
| 2.使用disco.exe。在命令行中写下如下的命令: | |||||||||||||
| disco http://localhost/webExamples/simpleService.asmx | |||||||||||||
| 3.使用System.Web.Services.Description命名空间下提供的类 | |||||||||||||
| 这里我只是用第一种方法 | |||||||||||||
| 4 | 开始写客户端程序 | ||||||||||||
| wsdl2h -o outfile.h(为自己任意起的头文件) infile.wsdl(提供的wsdl文件) | |||||||||||||
| 如果用生成纯C的代码,需要加编译选项-c | |||||||||||||
| wsdl2h -c -o outfile.h(为自己任意起的头文件) infile.wsdl(提供的wsdl文件) | |||||||||||||
| 根据生成的outfile.h文件,用工具soapcpp2 outfile.h生成构架代码 | |||||||||||||
| 如果用生成纯C的代码,需要加编译选项-c | |||||||||||||
| soapcpp2 -c outfile.h生成构架代码 | |||||||||||||
| 注意:在编译的过程中会提示找不到文件stlvector.h,你需要在gsoap\import下把这个文件拷贝过来。 | |||||||||||||
| 1) | 用到第三步的第一个方法 | ||||||||||||
| wsdl2h -o gjl.h http://localhost:4197/WebSite7/WebService.asmx?wsdl | |||||||||||||
| 2) | 编译刚才生成的gjl.h | ||||||||||||
| soapcpp2 -c gjl.h | |||||||||||||
| 结果图 | 图没全截,大致如下 | ||||||||||||




| 3) 根据 2)编译后生成的文件中,做为客户端需包含如下文件: | ||||||||||||||||||
| soapC.cpp soapWebServiceSoapProxy.cpp stdsoap2.cpp soapH.h soapStub.h soapWebServiceSoapProxy.h stdsoap2.h WebServiceSoap.nsmap(这个文件根据wsdl不同而不同) | ||||||||||||||||||
| stdsoap2.cpp等文件在gsoap安装目录的其他文件当中可找到 | ||||||||||||||||||
| 进行编译,出错请看红色 注意部分 | ||||||||||||||||||

| 4) | 开始写客户端代码 | |||||||||||||
| #include "soapWebServiceSoapProxy.h" | ||||||||||||||
| #include "WebServiceSoap.nsmap" | ||||||||||||||
| #include<string> | ||||||||||||||
| void main() | ||||||||||||||
| { | ||||||||||||||
| WebServiceSoapProxy service; | ||||||||||||||
| _ns1__HelloWorldResponse* xx=new _ns1__HelloWorldResponse; | ||||||||||||||
| ********************************************************插入代码 Start | ||||||||||||||
| if (service.HelloWorld(NULL,xx)== SOAP_OK) | ||||||||||||||
| { | ||||||||||||||
| std::cout<< "HelloWorld Result:" << *(xx->HelloWorldResult)<<"\n"; | ||||||||||||||
| } | ||||||||||||||
| else | ||||||||||||||
| service.soap_stream_fault(std::cerr); | ||||||||||||||
| _ns1__AddResponse* yy=new _ns1__AddResponse; | ||||||||||||||
| _ns1__Add* par=new _ns1__Add; | ||||||||||||||
| par->a=100; | ||||||||||||||
| par->b=200; | ||||||||||||||
| if (service.Add(par,yy) == SOAP_OK) | ||||||||||||||
| { | ||||||||||||||
| std::cout<<"Add Result:"<< yy->AddResult<<"\n"; | ||||||||||||||
| } | ||||||||||||||
| else | ||||||||||||||
| service.soap_stream_fault(std::cerr); | ||||||||||||||
| //std::cout<< service.Add("http://localhost:4197/WebSite7/WebService.asmx","http://tempuri.org/Add",NULL,NULL); | ||||||||||||||
| ********************************************************插入代码 End | ||||||||||||||
| } | ||||||||||||||
| 5) | 运行结构 | |||||||||||||


7030

被折叠的 条评论
为什么被折叠?



