把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

本人刚刚开始学,现在还是属于只知做法,不知原理 的阶段。望以后能补充说明。




更多相关文章

  1. Error:UNEXPECTED TOP-LEVEL ERROR:
  2. Android真正的静默安装
  3. android 解决listview.notifyDataSetChanged刷新时Imageloader加
  4. 【Android】PopupWindow中使用listview,listview的点击事件响应很
  5. Android的schedule、AlarmService、Timer定时器机制
  6. android开发-NDK-JNI入门教程
  7. Android(安卓)View 绘制刷新流程分析
  8. Android(安卓)使用Scroller实现绚丽的ListView左右滑动删除Item
  9. Android学习中遇到的优秀文章的总结(持续更新)

随机推荐

  1. XML+JSON面试题都在这里
  2. 财务自由之路
  3. 打包压缩加密备份_bash笔记6
  4. AJAX常见面试题
  5. 【不用框架】文件上传和下载
  6. AJAX入门这一篇就够了
  7. MyBatis之SqlSessions
  8. java8的一个新特性-Lambda表达式的详解(从
  9. HTTP触发Jenkins参数化构建
  10. java8中的一个骚操作-方法引用(使代码看起