把webservice 写好以后放到了服务器上,开始了Android,但是怎么样也访问不了webservice,本地是可以访问的,用soapui 测试也是可以访问的。就是写的访问不了。
下面是写的代码,此两方法都是同事提供的,是同事写java 写的webservice,写了各种访问的路径。
public class CMHBConstants {
// 此处指的是 写的webservice 的类名称 空间名 namespace + classname
public static final String WATCH_WEB_SERVICE="/WebService1/SystemManage";
// 这里指的是 webservice的namespace
public static String WATCH_WEB_SERVICE_NAMESPACE = "http://tempuri.org/";
//服务器上的地址 要访问的服务器
public static final String WATCH_WEB_SERVICE_URL_PREFIXTMP = "http://192.168.0.251";
// 访问的服务器地址 + webservice的空间+ 名字
public static final String URL_PATH = WATCH_WEB_SERVICE_URL_PREFIXTMP + WATCH_WEB_SERVICE;
}
写好了这些后,又写了一个类 ,调用webservice的方法的。
public class DataSyncUtil {
public static String getWebServiceData(String url,String nameSpace,
String methodName,Map<String,String> map) {
try {
String SOAP_ACTION = nameSpace + "/" + methodName;
SoapObject rpc = new SoapObject(nameSpace, methodName);
if (map != null) {
Set<String> keySet = map.keySet();
for (String s : keySet) {
rpc.addProperty(s, map.get(s));
}
}
HttpTransportSE ht = new HttpTransportSE(url);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER10);
envelope.bodyOut = rpc;
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
ht.call(SOAP_ACTION, envelope);
String resultStr = envelope.getResponse().toString();
return resultStr;
} catch (Exception e) {
Log.v("Exception Occureed",e.toString());
return "failed";
}
}
参数1;url 为 URL_PATH
参数2:namespace 为 WATCH_WEB_SERVICE_NAMESPACE
参数3 : 方法名
参数4:参数 ,参数的名字要和webservice里面的参数名字一样包括大小写。
按照这些方法写了以后,没有参数的传null 可以调用成功,但是带参数的方法总是掉用不到,到webservice 里面打了log以后,发现,参数的值都是为空的。
网上查了一下,c#.net 的webservice 的调用 好像跟java的 有点不一样。
下面是修改后的:
public class CMHBConstants {
//这里改变了。
public static final String WATCH_WEB_SERVICE="/htmesws/SystemManage.asmx?wsdl";
public static String WATCH_WEB_SERVICE_NAMESPACE = "http://tempuri.org/";
public static final String WATCH_WEB_SERVICE_URL_PREFIXTMP = "http://192.168.0.251";
public static final String URL_PATH = WATCH_WEB_SERVICE_URL_PREFIXTMP + WATCH_WEB_SERVICE;
}
同时也修改了DataSyncUtil 方法里面的一些
public class DataSyncUtil {
public static String getWebServiceData(String url,String nameSpace,
String methodName,Map<String,String> map) {
try {
String SOAP_ACTION = nameSpace + methodName;
SoapObject rpc = new SoapObject(nameSpace, methodName);
if (map != null) {
Set<String> keySet = map.keySet();
for (String s : keySet)
rpc.addProperty(s, map.get(s));
}
HttpTransportSE ht = new HttpTransportSE(url);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER10);
envelope.bodyOut = rpc;
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
ht.call(SOAP_ACTION, envelope);
//String resultStr = envelope.getResponse().toString();
//将上面一句 改成了下面的 才成功了
SoapObject so2 = (SoapObject) envelope.bodyIn;
String resultStr = so2.getPropertyAsString(0);
return resultStr;
} catch (Exception e) {
e.printStackTrace();
return "failed";
}
}
}
其实 url 是通过访问webservice得到的 在访问的后面加一个?wsdl 就可以看到
http://192.168.0.251/htmesws/SystemManage.asmx?wsdl
本人刚刚开始学,现在还是属于只知做法,不知原理 的阶段。望以后能补充说明。