使用 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 将复杂对象数组发送到 WCF 服务

使用 KSOAP2 从 Android 向 WCF 发送数据

Ksoap2 Android - 如何为复杂对象的子属性指定命名空间?

如何将本地 xml 文件转换为 org.ksoap2.serialization.SoapObject?

在Android中调用KSOAP2库访问webservice服务出现的服务端返回AnyType{}

WebService调用(基于KSOAP2)