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();