使用gsoap实现多客户端,单服务端webservice

本工程代码使用场景:2个webservice client ,1个webservice(本来有2个webservice,但富盛的不由我们管理开发)。
FS(富盛) webservice client, ZS(卓视) webservice client.  ZS(卓视) webservice.
本WebServiceClient 工程将FS(富盛) webservice client, ZS(卓视) webservice client合并到一个dll中。ZS(卓视) webservice为一个独立进程。

现为webservice添加 ResetQueryRecordPerEncoderId 接口。以下是添加新接口过程:
webservice 端:
1.手动编写pminfo.h,ns__ResetQueryRecordCounterPerEncoderId为新添加,头文件全内容如下:
(注意头文件里“//”不是注释,是gsoap指令,不可缺少)
//gsoap ns service name:    PMInfo
//gsoap ns service protocol:    SOAP
//gsoap ns service style:    rpc
//gsoap ns service encoding:    encoded

//gsoap ns schema namespace:    urn:PMInfo

int ns__ResetQueryRecordCounterPerEncoderId(int encoder_id,int *result);
int ns__getFSwebserviceUrl(std::string *result);
int ns__getPM2_5(int encoder_id,int *result);
int ns__getPM10(int encoder_id,int *result);
int ns__getWindSpeed(int encoder_id,int *result);
int ns__getNoiseVal(int encoder_id,int *result);

2.在命令行中输入以下命令,回车,则会生成服务端所需文件,最主要的是产生了 PMInfo.wsdl 文件。以文件可以反过来用wsdl2h.exe来生成标准的 gsoap头文件PMInfo.h(此文件可另外命名)

soapcpp2.exe -S -x -i -L PMInfo.h -I./import/

3.执行 wsdl2h.exe -o PMInfo.h  PMInfo.wsdl 生成 自动版 PMInfo.h 这里面会将原来手动添加接口的指针类型转换为引用类型。* =》 &
4.再执行 soapcpp2.exe -S -x -i -L PMInfo.h -I./import/ 生成自动版的引用类型gsoap相关文件。
5.编译WebServiceSvr 服务端工程,会生成WebServiceSvr.exe.此时服务端修改完成.

Client 端:
客户端DLL因为糅合了两个webservice client,故相对单一client 要复杂一些。主要是命名空间的命名和区分,其实就是为了让两套client 互相不干扰。因为原本soapH.h soapStub.h soapC.cpp 这些文件如果在两个client下会相互覆盖,只有一个生效,故需用命名空间分开。
1.首先将刚生成的PMInfo.wsdl拷贝到 WebServiceClient 目录 下,同时确保富盛的wsdl文件(“FSWebService.wsdl”)也在此目录下:
2.wsdl2h.exe -o FS.h -qFS FSWebService.wsdl 生成FS.h作为gsoap文件(工程中不必包含).
3. wsdl2h.exe -o ZS.h -qZS PMInfo.wsdl 生成ZS.h
4. soapcpp2.exe -C -L -i -x -qZS ZS.h -I./import/ 生成卓视客户端相关文件  注意:-x 不生成xml文件,这些文件对编码没用,一大堆,显得杂乱。-qZS 使用ZS命名空间
5. soapcpp2.exe -C -L -i -x -qFS FS.h -I./import/ 生成富盛客户端相关文件
6. soapcpp2.exe -C -penv env.h   生成环境头文件。(单客户端 时没有此文件)
7. 编译客户端工程。结束。

Demo:
编译testClientDLL进行测试。

时间: 2024-11-16 08:20:14

使用gsoap实现多客户端,单服务端webservice的相关文章

客户端调用服务端webservice的端口问题

今天有一个同事过来问:他有一个程序在A服务器上调第三方B服务器短信发送服务接口(webservice),无论是否发送成功,服务接口都会返回状态.现在客户要做每一个服务器 做入站端口管控,一切不必要的端口都要禁掉,问这边需要开放哪些入站端口,前提不要影响短信的发送和状态返回.同事说连接时己方的产生的端口号是随机的,不知道怎么回复用户. 这个问题看起来又简单又特殊,简单的是感觉禁用入站端口没有什么影响,特殊的是如果做了限制,状态消息返回不了.实则这个问题就是很简单的,要理解入站和出站的真实含义, 入

CXF创建webservice客户端和服务端

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui0317/article/details/9320053 一.CXF的介绍 Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成.CXF框架是一种基于servlet技术的SOA应用开发

Axis创建webservice客户端和服务端

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/article/details/9318317 一.Axis的介绍 Web Service是现在最适合实现SOA的技术,而Axis是实现Web Service的一种技术框架(架构). 二.Axis的准备条件 所需要的jar包: axis.jar jaxrpc.jar saaj.jar wsdl4j-

[Java]命令行模拟TCP客户端与服务端的简单小程序遇到的问题(基础不牢!扎实和亲手实践比什么都重要!)

简单得不能再简单的需求: 简单模拟TCP客户端与服务端的一次连接和通信,客户端发出一个消息,服务端回馈一个消息 自己第一次编写的代码: Client: class TcpClient1 { public static void main(String[] args) throws Exception { Socket s=new Socket("127.0.0.1",10010); OutputStream out=s.getOutputStream(); out.write(&quo

java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并

实现效果图: eclipse项目中初步整合之前的各个客户端和服务端的窗口与工具类,效果如下图: 已将注册服务器线程RegServer功能放到LoginServer中,使用客户端与服务端的request请求机制,根据请求是注册还是登录,分别进行相应response,客户端根据相应内容判断下一步操作. 发送信息的模式还较为原始,没有使用json方法,但gson包已经导入,支持发送键值对的字符串,及自动解析. 登录对话框LoginDialog类代码如下: package com.swift.frame

linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

单客户端和服务端的通信(基于UDP)   代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<unistd.h> #include<stdlib.h> #include<stdio.h> #include<string.h> #in

DatagramSocket客户端与服务端Java实例

1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 6 public class TimeClient_UDP{ 7 public static void main(String args[]) throws IOException{ 8 String host = "localhost&

网络编程(浏览器客户端-自定义服务端)

1 package netTest; 2 /* 3 * 演示客户端和服务端 4 * 1 客户端:浏览器 5 * 服务端:自定义 6 * tomcat 服务器所作的事情:用printwriter out 把网页数据全打到客户端去, 7 * 而浏览器可以解析 数据. 8 * telnet 远程登录:windows 提供的远程登录的工具,它可以去连接网络中的任意一台主机(dos命令行下连接) 9 * 可以对主机进行命令式的配置.(客户端软件) 10 */ 11 import java.net.*; 1

Netty入门之客户端与服务端通信(二)

Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码吧. 二.客户端与服务端的通信 2.1 服务端启动程序 public class MyServer { public static void main(String[] args) throws InterruptedException { EventLoopGroup bossGroup = ne