在Android中使用ksoap调用Web服务

3

我使用Visual Studio 2010创建了一个WCF并发布到WebMatrix 3上......

我在Android应用程序中调用此Web服务,但无法运行......

这是我的web.config文件:

<?xml version="1.0"?>
<configuration>
<system.web>
  <compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
  <behaviors>
  <serviceBehaviors>
    <behavior>

       <serviceMetadata httpGetEnabled="true"/>

      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
 <system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

</configuration>

这是我的Android代码:

   private static final String NAMESPACE = "http://tempuri.org/";
            private static final String URL = 
                "http://localhost:60977/Service1.svc?singleWsdl";   
  private static final String SOAP_ACTION =     "http://tempuri.org/IService1/GetData";
            private static final String METHOD_NAME = "GetData";
             TextView txt=(TextView)findViewById(R.id.textView1);
        SoapObject request = new SoapObject(NAMESPACE,      METHOD_NAME);       
    SoapSerializationEnvelope envelope = 
        new    SoapSerializationEnvelope(SoapEnvelope.VER11); 

                envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new    HttpTransportSE(URL);
                name("SS");
                try {
                    name("0");
            androidHttpTransport.call(SOAP_ACTION, envelope);
                    name("1");
        SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
                    name("2");
                    name(resultsRequestSOAP.toString());
                    name("3");
            txt.setText("Received :" + resultsRequestSOAP.toString());

                } catch (Exception e) {
                    txt.setText(e.getMessage());
                    name(e.getMessage());
                    e.printStackTrace();
                }

当捕获到运行时,没有任何消息...

在 AVD 中连接到本地主机,你需要使用网址 http://10.0.2.2/ 而不是 http://localhost/。 - Nirmal
3个回答


0
 private static final String URL = 
                "http://localhost:60977/Service1.svc?singleWsdl"; 
            private static final String METHOD_NAME = "GetData";
    final String SOAP_ACTION = "http://tempuri.org/GetData";                  

                       try {
                           SoapObject request = new SoapObject(WebServiceUtil.NAMESPACE, METHOD_NAME);
                           SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                           envelope.dotNet = true;                        
                           envelope.setOutputSoapObject(request);

                           HttpTransportSE androidHttpTransport = new HttpTransportSE(WebServiceUtil.URL);
                           Log.d("URL  :: ", WebServiceUtil.URL);           
                           androidHttpTransport.call(SOAP_ACTION, envelope);


                       }
                       catch (Exception e) {
                            e.printStackTrace();

                       }

                }

0

实际上,这里的localhost是模拟器本身,因为代码运行在模拟器内部。所以你应该连接到10.0.2.2。更多细节请参见Android模拟器网络,别忘了在清单文件中添加网络权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接