Android 访问 .net C#写的webservice

       把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 

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值