首先要先了解一下webservice(参照以下的链接内容)
https://blog.csdn.net/u011199063/article/details/78550005

访问webservice

以下是我的服务端包结构

服务端有个LoginService的类里面的getWareHouse方法其实就是我真正的想要去调用的方法。不用太研究,就是根据传入的参数进行了一个查询并返回的一个操作。

LoginService服务端发布之后,页面告诉我们测试访问的网址是
http://localhost:8080/FlutterService/services/LoginService
我的电脑的ip是192.168.1.21

去测试一下是否真的发布成功了,如图代表确实已经有了。

发布成功后在webconten下面一般有个wdsl文件的,我们找到对应的文件,里面其实就是一些信息。比如在这里我们知道targetNamespace是rd,比如有这个LoginService里面有几个方法啊,方法里面一般要什么参数啊之类的,其实是个类似于说明文档的东西。

但是我们的最终目的并不是这个外层的网址,而是如何去到里面的getWareHouse方法,并且将参数传递进去。
这时候我们要了解如何去访问,那么最上面的网址里面有详细的解释,这边就简单摘录一下-------首先必须是POST方法,而且要使用http发送XML格式的数据,数据的格式如下
Envelope:必须有,此元素将整个 XML 文档标识为一条SOAP消息
Header:可选元素,包含头部信息
Body:必须有,包含所有调用和响应信息
Fault:可选元素,提供有关在处理此消息时所发生的错误信息,以下是那位博主给出的例子,那么我们也仿照这个例子。

对于我的服务器而言我的XML应该长如下图所示:
为什么是rd:getWareHouse的标签
因为targetNamespace是rd,而要去调用的真正方法是getWareHouse。
也就是说,我们只要能够通过post方法将这个xml发送到对应的网址我们就能够成功与服务端通信了。
网址是什么?就是之前测试的时候的那个网址
http://192.168.1.21:8080/FlutterService/services/LoginService

所以具体实现如下:
以下是在HttpUtil类里面写的静态方法,为了测试偷懒了现在参数写死的没有按照传入的写


import 'dart:io';
import 'package:app_flutter/common/global.dart';
import 'package:dio/dio.dart';class HttpUtil{static Future<String> doPostWithMap(String serviceName,Map<String, dynamic> param) async {//实际如果访问 eg: http://192.168.1.201:8080/FlutterService/services/LoginServicetry {var url="http://"+Global.WEBSERVICE_IP+":"+Global.WEBSERVICE_PORT+"/"+Global.WEBSERVICE_FOLD+"/services/"+serviceName;var headers={"SOAPAction": url,"Content-Type": "text/xml;charset=UTF-8","cache-control": "no-cache"};var body=creatEnvelope("getWareHouse");print(url);print(body);Dio dio=new Dio(BaseOptions(headers: headers));//设置头var response = await  dio.post(url,data:body );//设置访问携带的信息return  response.data;} catch (e) {print(e);return "";}}//根据要访问的方法去创建一个信封static String creatEnvelope(String methodName){var envelope="<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">";//envelop标签envelope=envelope+"<S:Body>";//body 必须有envelope=envelope+"<"+Global.NAMESPACE+"\:"+methodName+" xmlns:"+Global.NAMESPACE+"\=\"http://jaxws.ws.itcast.cn/\">";//body 必须有envelope=envelope+"<arg0>wpsadmin<\/arg0>"; //参数1 现在写死了envelope=envelope+"<arg1>SUPER_MAN<\/arg1>";//参数2envelope=envelope+"<\/rd:getWareHouse>";envelope=envelope+"<\/S:Body>";envelope=envelope+"<\/S:Envelope>  ";return envelope;}
}
//全局变量
import 'package:shared_preferences/shared_preferences.dart';class Global{//实际如果访问 eg: http://192.168.1.201:8080/FlutterService/services/LoginServicestatic final String  WEBSERVICE_IP="192.168.1.21";static final String  WEBSERVICE_PORT="8080";static final String  WEBSERVICE_FOLD="FlutterService";static final String NAMESPACE="rd";static final String LoginService="LoginService";static late SharedPreferences _prefs;static Future init() async{_prefs=await SharedPreferences.getInstance();}
}

调用

 void _getWareHouse(String userId) async {//获取查询结果String jsonString =await HttpUtil.doPostWithMap(Global.LoginService,{"USER_ID":"wpsadmin","ROLE_ID":"SUPER_MAN"});}

我们设置的url是http://192.168.1.201:8080/FlutterService/services/LoginService

我们通过代码创建的Envelope,输出的内容为了方便观察手动调整了下格式,确实如之前的图片一样的。

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<rd:getWareHouse xmlns:getWareHouse="http://jaxws.ws.itcast.cn/">
<arg0>username</arg0><arg1>SUPER_MAN</arg1>
</rd:getWareHouse>
</S:Body></S:Envelope>

那我们是否真的访问到了呢,由于我在服务端有进行输出所以看一下服务端有没有输出的记录,有记录说明真的访问到了。

当然,访问完成获得的结果也是一个xml文件,也要按照特定的格式去解析这里我就不多加描述了。

但是说真的有点麻烦,特别是解析返回值的时候,感觉flutter还是支持json比较好可以直接json转model类,所以直接还是后端重写了,直接用servlet返回json了。

Flutter访问webservice相关推荐

  1. 如何访问webService接口

    在上篇的文章中我们接触到如何来编写webService接口,这篇文章我们将讲述的是如何来访问webService接口 首先比如这样的一个接口:http://127.0.0.1:11111/weathe ...

  2. Android 访问WebService

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/50503428 首先,WebService进年 ...

  3. 如何直接soap字符串,访问webservice

    2019独角兽企业重金招聘Python工程师标准>>> 1.Webservice.GetVcardByUserNo(String userId,String userNo);这个是封 ...

  4. qt linux webservice,Qt实现访问WebService

    之前也许是因为根本不用的原因吧,,,根本没有想过Qt访问WebService的方式.... 要解决这个问题,因为Qt现行版没有提供直接访问的类库...首先是一些必备知识, 我连的服务器是用VS2010 ...

  5. ajax的访问 WebService 的方法

    转自原文 ajax的访问 WebService 的方法 如果想用ajax进行访问 首先在web.config里进行设置 添加在 <webServices> <protocols> ...

  6. 在SharePoint网站中访问Webservice被拒绝的解决方法

    在SharePoint网站中访问Webservice时可能会遇到如下的问题: 原因是SharePoint默认已经禁止对后缀为asmx的文件进行访问,所以回出现如上的问题,解决方法很简单,打开Share ...

  7. 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决

    在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决 参考文章: (1)在Android中调用KSOAP2库访问webservice服务出现的服务端 ...

  8. C++访问WebService

    转自:http://www.cnblogs.com/virtorld/archive/2012/11/16/2773395.html#3003232 一    gSOAP访问WebService 1. ...

  9. Python3 通过 suds 访问 webservice

    Python通过suds访问webservice 本文描述了如何通过suds库访问webservice接口 Python通过suds访问webservice suds安装 Webservice访问测试 ...

最新文章

  1. Expression Blend 4 激活码
  2. 设计模式复习-策略模式
  3. 子查询中的空值导致的问题。
  4. 迅为linux下串口,迅为iMX6UL开发板多路串口开发板接口详解
  5. Eclipse——e(fx)clipse下载错误导致的安装失败解决方案
  6. 初步认识注册表(待续)
  7. 1、程序员常用工具网站
  8. JAVA中string的赋值_Java中关于String赋值的两种形式
  9. package.json相关疑惑总结
  10. # 电脑管家_如何彻底关闭电脑上的“恶心小广告”?联想电脑管家一步到位!...
  11. Linux定时向目标服务器传输文件
  12. curl 命令-接口测试
  13. 重启oracle数据库
  14. VMware-分配 vSphere 5.0 许可证密钥
  15. 事件监听(窗口关闭、输入框事件、计算器、画笔、鼠标、窗口、键盘)
  16. THUSC2019:Illusory World
  17. Processing学习笔记 巨细无比
  18. c++ DFS练习 红与黑
  19. 笃行致远 砥砺前行 华云数据西南区域公司正式乔迁
  20. (转)quest3D项目管理

热门文章

  1. Shiro自定义Ream
  2. Python爬虫+颜值打分,5000+图片找到你的Mrs. Right
  3. cdh 6哈希验证失败解决方法
  4. Latex改变图片、表格标题字号
  5. 【Apollo 6.0项目实战】Perception模块
  6. 深度学习-fashion_mnist预测
  7. 黄金避险有效?量化实测黄金资产与A股轮动真实收益
  8. PHP在线客服系统平台源码(完全开源的网页在线客服系统)
  9. java 创建用户界面_建立图形用户界面 JAVA实验
  10. 又涨了?2022年1月程序员平均薪资15052元,高薪还能持续多久?