gsoap开发webservice 服务端.md

无WSDL文件

1.编写头文件websever2.h:

 1 //gsoap ns service name: calc
 2 //gsoap ns service style: rpc
 3 //gsoap ns service encoding: encoded
 4 //gsoap ns service namespace: http://127.0.0.1:8089/calc.wsdl
 5 //gsoap ns service location: http://127.0.0.1:8089/cal
 6 //gsoap ns schema  namespace:    urn:calc
 7 int ns__add(double a, double b, double *result);
 8 int ns__sub(double a, double b, double *result);
 9 int ns__mul(double a, double b, double *result);
10 int ns__div(double a, double b, double *result);
11 int ns__pow(double a, double b, double *result);

2.生成文件:

1 C:\Users\admin>e:
2 E:\>cd E:\4.0projet\webserver2\gsoap_2.9.65\gsoap-2.8\gsoap\bin\win32
3 E:\4.0projet\webserver2\gsoap_2.9.65\gsoap-2.8\gsoap\bin\win32>soapcpp2.exe -i -2 webserver2.h

3.将以下文件拷如项目:

前6个路径:
E:\4.0project\webserver2\gsoap_2.8.65\gsoap-2.8\gsoap\bin\win32

cal.nsmap
soapC.cpp
soapcalService.cpp(名称不固定,以service结尾)
soapcalcService.h(名称不固定,以service结尾)
soapH.h
soapStub.h

以下文件在路径:
E:\4.0project\webserver2\gsoap_2.8.65\gsoap-2.8\gsoap

stdsoap2.h
stdsoap2.cpp

分别添加到Header Files、Resource Files、Source Files内

4.编写gSOAPService.cpp:

  1 #define _CRT_SECURE_NO_WARNINGS   **//一定要添加上**
  2 #include "calc.nsmap"
  3 #include"soapcalcService.h"
  4 #include "iostream"  //控件问提只能写“”
  5
  6 using namespace std;
  7
  8 //很重要
  9 int   http_get(struct   soap   *soap)
 10 {
 11     FILE*fd = NULL;
 12     fd = fopen("E:\\4.0project\\webserver2\\gsoap_2.8.65\\gsoap-2.8\\gsoap\\bin\\win32\\calc.wsdl", "rb"); //open WSDL file to copy
 13
 14     if (!fd)
 15     {
 16         return 404; //return HTTP not found error
 17     }
 18     soap->http_content = "text/xml";  //HTTP header with text /xml content
 19     soap_response(soap, SOAP_FILE);
 20     for (;;)
 21     {
 22         size_t r = fread(soap->tmpbuf, 1, sizeof(soap->tmpbuf), fd);
 23         if (!r)
 24         {
 25             break;
 26         }
 27         if (soap_send_raw(soap, soap->tmpbuf, r))
 28         {
 29             break; //cannot send, but little we can do about that
 30         }
 31     }
 32     fclose(fd);
 33     soap_end_send(soap);
 34     return SOAP_OK;
 35 }
 36 int main(int argc, char *argv[])
 37 {
 38     calcService cal;
 39     cal.fget = http_get;
 40     while (1)
 41     {
 42         if (cal.run(8089))
 43         {
 44             cal.soap_stream_fault(std::cerr);
 45         }
 46     }
 47     return 0;
 48 }
 49
 50 //自动生成了calcService类,自己重写add等函数
 51 /*加法的具体实现*/
 52 int calcService::add(double num1, double num2, double* result)
 53 {
 54     if (NULL == result)
 55     {
 56         printf("Error:The third argument should not be NULL!\n");
 57         return SOAP_ERR;
 58     }
 59     else
 60     {
 61         (*result) = num1 + num2;
 62         return SOAP_OK;
 63     }
 64     return SOAP_OK;
 65 }
 66
 67 /*减法的具体实现*/
 68 int calcService::sub(double num1, double num2, double* result)
 69 {
 70     if (NULL == result)
 71     {
 72         printf("Error:The third argument should not be NULL!\n");
 73         return SOAP_ERR;
 74     }
 75     else
 76     {
 77         (*result) = num1 - num2;
 78         return SOAP_OK;
 79     }
 80     return SOAP_OK;
 81 }
 82
 83 /*乘法的具体实现*/
 84 int calcService::mul(double num1, double num2, double* result)
 85 {
 86     if (NULL == result)
 87     {
 88         printf("Error:The third argument should not be NULL!\n");
 89         return SOAP_ERR;
 90     }
 91     else
 92     {
 93         (*result) = num1 * num2;
 94         return SOAP_OK;
 95     }
 96     return SOAP_OK;
 97 }
 98
 99 /*除法的具体实现*/
100 int calcService::div(double num1, double num2, double* result)
101 {
102     if (NULL == result || 0 == num2)
103     {
104         return soap_senderfault("Square root of negative value", "I can only compute the square root of a non-negative value");
105         return SOAP_ERR;
106     }
107     else
108     {
109         (*result) = num1 / num2;
110         return SOAP_OK;
111     }
112     return SOAP_OK;
113 }
114
115 int calcService::pow(double num1, double num2, double* result)
116 {
117     if (NULL == result || 0 == num2)
118     {
119         printf("Error:The second argument is 0 or The third argument is NULL!\n");
120         return SOAP_ERR;
121     }
122     else
123     {
124         (*result) = num1 / num2;
125         return SOAP_OK;
126     }
127     return SOAP_OK;
128 }

测试:浏览器输入: http://127.0.0.1:8089/calc.wsdl
可以查看wsdl文件 soapUI,新建soap工程,选择对应的wsdl,可以测试使用

已有wsdl文件

部分情况下,客户端已开发完成,需要根据已有wsdl生成.h文件,再通过.h文件生成服务端代码。 根据已有wsdl文件,生成.h文件

D:\JHC00144512\gsoap_2.8.65\gsoap-2.8\gsoap\bin\win32>wsdl2h.exe calc.wsdl

修改wsdl地址时,主要修改wsdl文件内最后一部分中的:

<soap:address location="http://127.0.0.1:8089/macWS"/> 内location信息。


原文地址:https://www.cnblogs.com/ouzai/p/11840993.html

时间: 2024-10-07 00:13:59

gsoap开发webservice 服务端.md的相关文章

gsoap开发webservice

gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多.绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库.与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来. gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构

JAVA WEBSERVICE服务端&amp;客户端的配置及调用(基于JDK)

前言:我之前是从事C#开发的,因公司项目目前转战JAVA&ANDROID开发,由于对JAVA的各种不了解,遇到的也是重重困难.目前在做WEBSERVICE提供数据支持,看了网上相关大片的资料也是云里雾里的,索性最后得以解决,现将代码及方法发布如下,有需要的朋友可以参考,谢谢! --------------------------------------------------- WEBSERVICE服务端 package lavasoft; import javax.jws.WebMethod;

【webservice】发布axis2的webservice服务端

axis2版本:axis2-1.5.4 准备工作:下载axis2-1.5.4-war.zip(生成服务端).axis2-1.5.4-bin.zip(axis2的jar包),jdk5(及以上版本).tomcat(端口我设成8086了) 手把手超级详细介绍axis2的webservice服务端的生成与发布. 1. 解压axis2-1.5.4-war.zip得axis2.war,把axis2.war放到tomcat的webapps目录, 启动tomcat就能加载axis2.war并生成新的axis2目

C#根据WSDL文件生成WebService服务端代码

转自:http://www.cnblogs.com/liyi93/archive/2012/01/30/2332320.html 虽然现在已经进入了.NET FrameWork 4.0的时代,WebService也已经逐渐被淘汰,取而代之的是WCF. 但在工作中难免遇到需要兼容旧版本程序和按照以前的文档进行开发. 一般一个已经实现功能的WebService会发布自己的WSDL文件,供客户端调用生成代理类. 但有时是先有server与client交互的接口定义(WSDL)文件,然后由server和

spring+resteasy开发webservice服务

有一段时间没有更新博客,主要是最近一段时间自己比较迷茫,一直在思考自己以后的路该怎么走.希望大家也可以给我一些建议,谢谢!好了,回归正题,今天给大家带来的是spring+resteay开发webservice服务,不知道大家是否在这之前接触过webservice,我之前所了解的webservice是使用cxf还有axis2开发的,但是我觉得实现起来比较麻烦,而且不灵活,今天给大家介绍一种比较灵活的提供webservice服务的技术:resteasy.下面我重点讲解的resteasy常用的一些知识

PHP写webservice服务端

1) WebService技术介绍 WebService是一种跨编程语言和跨操作系统平台的远程调用技术.仅仅有通过Web Service,client和server才可以自由的用HTTP进行通信.不论两个程序的平台和变成语言是什么. XML.SOAP和WSDL是Web Service平台的三大技术: WebService採用HTTP协议数据传输.採用XML格式封装数据,即XML中说明调用远程服务对象的哪个方法.传递的參数是什么.以及服务对象的返回结果是什么. XML是WebService平台中表

myeclipse-简历webservice服务端和客户端

一.建立webservice服务端: 1.新建一个web service project,名称为webservice_server截图如下,点击finish. 2.选择工程,点击右键,选择new->other,选择myelipse中的webservice->Web Service,点击next, 此处的hello可在server.xml中匹配可见,点击finish,然后修改其生成的方法. 3.将该工程部署至Tomcat中,并启动该工程,在浏览器中输入http://localhost:8080/

delphi调用 java 的 WebService服务端.

// InvRegistry.RegisterInvokeOptions(TypeInfo(ModelADServicePortType), ioLiteral); InvRegistry.RegisterInvokeOptions(TypeInfo(ModelADServicePortType), ioDocument); delphi调用 java 的 WebService服务端.,布布扣,bubuko.com

WebService 服务端客户端 实例(一)

Delphi中WebService包含的组件解释(有7个)     (1) THTTPRIO-------:使用Http消息来调用远程使用SOAP的接口对象     (2) THTTPReqResp---:给服务器发送一个SOAP消息, THTTPReqResp在可调用接口上执行一个方法请求.       (3) TOPToSoapDomConvert ----:TOPToSoapDomConvert处理Soap方法请求的组合与分发     (4) TSoapConnection:TSoapCo