- 如何区分服务是webservice服务和wcf服务
webservice服务网址是以.asmx结尾的,例子:http://ip地址/Interface/MapService.asmx?wsdl
wcf服务是以.svc结尾的,例子:http://ip地址/ydyzt/ReadXml.svc?wsdl - 使用ksoap2调用两个服务基本相同,唯一需要注意的是:soapAction
webservice的soapAciton = nameSpace+methodName
而wcf的soapAction不等于nameSpace+methodName
例子:webservice服务中
String nameSpace = “http://tempuri.org/”;
String methodName = “RetDatePrjinfo”;
String soapAction = “http://tempuri.org/RetDatePrjinfo”;
在wcf服务中
String nameSpace = “http://tempuri.org/”;
String methodName = “DoWork”;
String soapAction = “http://tempuri.org” + “/IService” + “/DoWork”;
其中IService需要去(网址?wsdl例如:http://192.88.223.169/ydyzt/ReadXml.svc?wsdl)中找
下面是使用ksoap2请求wcf服务(不含请求参数)的代码,根据实际情况修改nameSpace,methodName 和soapAction,根据实际情况添加请求参数
String nameSpace = "http://tempuri.org/";
String methodName = "DoWork";
String soapAction = "http://tempuri.org" + "/IService" + "/DoWork";
String url = "http://192.88.223.169/ydyzt/ReadXml.svc?wsdl";
SoapObject request = new SoapObject(nameSpace, methodName);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
envelope.bodyOut = request;
try {
HttpTransportSE transportSE = new HttpTransportSE(url);
transportSE.call(soapAction, envelope);
SoapObject bodyIn = (SoapObject) envelope.bodyIn;
String property = bodyIn.getProperty(0).toString();
// Log.e("获取到数据", property);
return property;
} catch (Exception e) {
e.printStackTrace();
}
使用ksoap2请求webservice服务(含请求参数)的代码,根据实际情况修改nameSpace,methodName 和soapAction,根据实际情况添加请求参数
String uploadUrl = "http://117.17.18.120:6061/PublicInterface/MapService.asmx?WSDL";
String uploadNameSpace = "http://tempuri.org/";
String uploadMethodName = "UploadProjectFileInfo "; //
String uploadSoapAction = "http://tempuri.org/UploadProjectFileInfo";
SoapObject request = new SoapObject(uploadNameSpace, uploadMethodName);
request.addProperty("strUploadUserName", "");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
envelope.bodyOut = request;
try {
HttpTransportSE transportSE = new HttpTransportSE(uploadUrl);
new MarshalBase64().register(envelope);
transportSE.call(uploadSoapAction, envelope);
Object response = envelope.getResponse();
SoapObject bodyIn = (SoapObject) envelope.bodyIn;
String property = bodyIn.getProperty(0).toString();
return property;
} catch (Exception e) {
e.printStackTrace();
return e.toString();
}