【问题标题】:Android call WCF serviceAndroid调用WCF服务
【发布时间】:2012-08-10 23:15:27
【问题描述】:

我在从Android application 调用WCF web service 时遇到问题。如果我调用以下 URL,"http://10.0.2.2:80/WebService/WebServiceImpl.svc" 我会收到响应 "200 OK",但是当我尝试在服务 "http://10.0.2.2:80/WebService/WebServiceImpl.svc/Test" 中调用该函数时,我会收到响应 "400 Bad request"

有人可以帮忙吗?

namespace WebService
{
    public class WebServiceImpl : IWebServiceImpl
    {
        #region IRestServiceImpl Members
        public string Test()
        {
            return "Test pass";
        }

        #endregion
    }
}

namespace WebService
{
    [ServiceContract]
    public interface IWebServiceImpl
    {
     [OperationContract]
        [WebInvoke(
            Method = "GET")]
        string Test();
    }
}

Android 活动:

    public void onClick(View v)
    {
        // TODO Auto-generated method stub
        HttpClient  client = new DefaultHttpClient();
        String SERVER_HOST="10.0.2.2";
        int SERVER_PORT = 80;
        String URL = "http://10.0.2.2:80/WebService/WebServiceImpl.svc/Test";
        HttpHost target = new HttpHost(SERVER_HOST, SERVER_PORT, "http");
        HttpGet request = new HttpGet(URL);
        try
        {
            HttpResponse response = client.execute(target,request);
            HttpEntity entity = response.getEntity();
            MessageBox(response.getStatusLine().toString());
        }
        catch(Exception e)
        {
            MessageBox("excepton");
            MessageBox(e.toString());
        }
    }

    public void MessageBox(String message){
        Toast.makeText(this,message,Toast.LENGTH_LONG).show();
    }

【问题讨论】:

  • 你的配置在服务器上是什么样子的?它是否具有设置正确行为的 webHttpBinding ?

标签: android wcf web-services


【解决方案1】:

我使用“SoapObject”解决了这个问题

部分代码:

public static final String NAMESPACE = "http://tempuri.org/";
public static final String URL = "http://10.0.2.2:80/MyFirstPublishedWebService/WebServiceImpl.svc?wsdl";  
public static final String SOAP_ACTION = "http://tempuri.org/IWebServiceImpl/Login";
public static final String METHOD_NAME = "Login";

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = 
    new SoapSerializationEnvelope(SoapEnvelope.VER11); 

envelope .dotNet = true;

envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

try {
    androidHttpTransport.call(SOAP_ACTION, envelope);
}
catch (Exception e) {

}

亚历克斯,感谢您的回答!

【讨论】:

    【解决方案2】:

    首先在浏览器中测试这个 url。如果您遇到同样的问题,请在清单中为您的服务启用 Web 访问。

    二次检查 ip 10.0.2.2 是否可以从您的手机访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2011-05-04
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多