使用 ksoap2 使用 WCF 服务
Posted
技术标签:
【中文标题】使用 ksoap2 使用 WCF 服务【英文标题】:Consuming WCF service using ksoap2 【发布时间】:2014-07-13 13:45:59 【问题描述】:我正在尝试在我的 android 项目中使用 wcf 服务,但出现以下错误
05-24 02:44:35.995: E/TAG(1731): Error: expected: START_TAG http://schemas.xmlsoap.org/soap/envelope/Envelope (position:START_TAG <html>@2:7 in java.io.InputStreamReader@b41da630)
final String NAMESPACE = "http://tempuri.org/";
final String METHOD_NAME = "getWeather";
final String SOAP_ACTION = "http://tempuri.org/IService1/getWeather";
final String URL = "http://10.0.2.2:44482/Service1.svc";
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
Request.addProperty("cityName", "Karachi");
SoapSerializationEnvelope soapEnvelop;
soapEnvelop = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelop.dotNet = true;
soapEnvelop.setOutputSoapObject(Request);
HttpTransportSE htp = new HttpTransportSE(URL, 15000);
// int jumpTime = 0;
// progress.setProgress(jumpTime);
htp.call(SOAP_ACTION, soapEnvelop);
response = (SoapObject) soapEnvelop.getResponse()
【问题讨论】:
【参考方案1】:希望对您有所帮助。
private String getDataWebService()
final String NAMESPACE = "http://tempuri.org/";
final String METHOD_NAME = "getWeather";
final String SOAP_ACTION = "http://tempuri.org/IService1/getWeather";
final String URL = "http://10.0.2.2:44482/Service1.svc";
try
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo info = new PropertyInfo();
info.setName("city");
info.setValue("city_name");
info.setType(String.class);
Request.addProperty(info);
SoapSerializationEnvelope soapEnvelop= new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelop.dotNet = true;
soapEnvelop.setOutputSoapObject(Request);
AndroidHttpTransport httpTransport = new AndroidHttpTransport(URL);
httpTransport.call(SOAP_ACTION, soapEnvelop);
Object response = null;
response = soapEnvelop.getResponse()
return response.toString();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
return null;
catch (XmlPullParserException e)
// TODO Auto-generated catch block
e.printStackTrace();
return null;
【讨论】:
AndroidHttpTransport 无法解析为类型..? 请替换这一行 AndroidHttpTransport httpTransport = new AndroidHttpTransport(URL);通过 HttpTransportSE httpTransport = new HttpTransportSE(YOUR_URL);这能解决你的问题吗 LOL.. 那么您发布的内容与我在问题中发布的内容有什么区别。我很高兴您做出了贡献,但复制粘贴并非一直有效..!! 但是我在这里写的程序在我身边工作。【参考方案2】:嗯,谢谢大家的贡献,但我已经解决了我的问题。问题是 Visual Studio 2013 中的 IIS Express 服务器。我试图从 android 访问我的 Web 服务,但 IIS Express 可能没有配置或其他什么。无论如何,解决方案是从项目属性中更改您的服务器。从 IIS Express 更改为 ASP.Net 应用程序开发服务器。
PS: Visual Studio 2013 不再支持 Visual Studio Application Development Server。
【讨论】:
以上是关于使用 ksoap2 使用 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章
使用 KSOAP2 从 Android 向 WCF 发送数据
Ksoap2 Android - 如何为复杂对象的子属性指定命名空间?
如何将本地 xml 文件转换为 org.ksoap2.serialization.SoapObject?