WebService原理
三大技术
XML
WebService采用Http协议传输数据,使用XML封装数据以实现跨平台。
SOAP
规定消息头和XML内容格式的协议
WSDL
WebService的说明书,提供所能使用的方法、参数和返回值。
IIS 新建WebService站点
新增网站
打开IIS控制台,找到服务根目录,右键,新建网站
网站设定
浏览测试
使用刚才生成的默认HelloWorld的服务1页面,记得加上端口号
http://localhost:8090/service1.asmx
如果出现以下画面,代表设置成功
C# WebService
新增WebService专案
更改服务程式名称
重命名程式名称
Service1.asmx 修改为 TestService.asmx
此时下面的cs代表文件也会跟着修改,但可发现,代码中的类名并没有跟着变动
修改类名称
手动将类名称由 Service1 修改为 TestService
如果此时执行发布会发现还是会有问题,报错無法建立型別 ‘.Service1’
修改服务绑定代码
在 TestService.asmx 上右键选择打开方式,选择“Web服务编辑器”打开
此时会看到服务所有设定,比如编程语言,后台代码,类库等,修改类库名为上一步所设值
发布
专案上右键,点击发布,如果不是第一次发布,上次的配置会保留,默认就好
Android Soap
Ksoap2-android
官网地址
https://simpligility.github.io/ksoap2-android/index.html
发行版本
https://oss.sonatype.org/content/repositories/ksoap2-android-releases/
- 切记所需要的文件是在
com>google>code>ksoap2-android>ksoap2-android-assembly
- 选择最新版本,然后使用-with-dependencies.jar包
最新版本
https://oss.sonatype.org/content/repositories/ksoap2-android-releases/com/google/code/ksoap2-android/ksoap2-android-assembly/3.6.4/ksoap2-android-assembly-3.6.4-jar-with-dependencies.jar
调用WebService取得数据
初使化soap
private final String serviceNameSapce = "http://192.168.20.135:8090/";
private final String serviceUrl = "http://192.168.20.135:8090/TestService.asmx";
private final String serviceMethod = "HelloWorld";
private final String serviceAction = "http://192.168.20.135:8090/HelloWorld";
private String strResult = "";
调用
new Thread(new Runnable() {
@Override
public void run() {
//创建HttpTransportSE传输对象,serviceUrl是webservice提供服务的url
HttpTransportSE httpTransportSE = new HttpTransportSE(serviceUrl);
//使用SOAP1.1协议创建Envelop对象,根据服务端WebService的版本号设置SOAP协议的版本号
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
//实例化SoapObject对象,第一个参数表示命名空间,第二个参数表示要调用的WebService方法名
SoapObject soapObject= new SoapObject(serviceNameSapce, serviceMethod);
//设置调用方法的参数值,如果没有参数,可以省略
//soapObject.addProperty("theCityCode", cityName);
envelope.bodyOut = soapObject;
envelope.dotNet = true;
try {
//调用webservice
httpTransportSE.call(serviceAction, envelope);
//获取服务器响应返回的SOAP消息
if(envelope.getResponse() != null){
SoapObject resultSoap = (SoapObject)envelope.bodyIn;
strResult = resultSoap.getProperty(0).toString();
mHandler.sendEmptyMessage(0x002);
}
} catch (IOException | XmlPullParserException e) {
e.printStackTrace();
}
}
}).start();