2013-02-18 79 views
1

我一直試圖通過android使用kso​​ap2(我已經嘗試過併成功獲得了不同的web服務)來調用簡單的.NET webservice(HelloWorld)。但是這個需要身份驗證,所以我搜索瞭如何爲身份驗證添加頭,但仍然沒有結果在我的textview中返回。在Android中使用kso​​ap2調用.NET webservice,沒有結果返回

SoapObject Request = new SoapObject(NAMESPACE,METHOD_NAME); 
List<HeaderProperty> headers = new ArrayList<HeaderProperty>(); 
headers.add(new HeaderProperty("Authorization", "Basic"+Base64.encode("Username:Password".getBytes()))); 


     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet=true; 
     envelope.setOutputSoapObject(Request); 

     HttpTransportSE aht = new HttpTransportSE(URL); 


     try{ 
      aht.call(SOAP_ACTION,envelope,headers); 
      SoapPrimitive resultString = (SoapPrimitive)envelope.getResponse(); 

      tv.setText("yo :" + resultString); 

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

我也曾經在我的日誌中記錄錯誤:

錯誤:螺紋連接的失敗,但我不認爲這是

這裏的來源是爲HelloWorld的WSDL方法:

>  <wsdl:types> 
>  <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/"> 
>  <s:element name="HelloWorld"> 
>  <s:complexType/> 
>  </s:element> 
>  <s:element name="HelloWorldResponse"> 
>  <s:complexType> 
>  <s:sequence> 
>  <s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string"/> 
>  </s:sequence> 
>  </s:complexType> 
>  </s:element> 

我的問題。 有沒有人遇到過這種問題,或者我的代碼在某些時候是錯誤的?

+0

如果.net ws方法有任何參數?這是請求 – 2013-02-18 11:06:32

+0

我不這麼認爲,這只是一個Helloworld測試,所以我沒有添加屬性到我的請求 – Labraiki 2013-02-18 11:25:56

+0

我添加了一些代碼,如果你需要使用它...我希望這會對你有所幫助.. – 2013-02-18 11:33:15

回答

0

試試這個:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
         SoapEnvelope.VER11);  
request.addProperty("requst_name",request_value);//if you have any request add here..     
envelope.setOutputSoapObject(request); 
envelope.implicitTypes = true; 
envelope1.dotNet = true; 
int Timeout = 60000; 
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL, Timeout); 
androidHttpTransport.debug = true; 
       try { 

        androidHttpTransport.call(SOAP_ACTION, envelope); 
        Object response = envelope.getResponse(); 
        String res=response.toString(); 
        } 

        }catch (XmlPullParserException e) { 

         e.printStackTrace(); 
        } catch (SocketTimeoutException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
+0

我試過你的代碼,但沒有結果,沒有發現exceptioon,它似乎代碼很好,但我的textview不顯示結果。我試圖設置我的textview來測試它裏面我嘗試catch塊:tv.setText(「喲:」);當我啓動應用程序時它仍然只顯示textview,這是什麼意思? – Labraiki 2013-02-18 12:08:06

+0

你可以發佈你的wsdl文件 – 2013-02-18 12:08:41

+0

奧基,我把它添加到我的問題 – Labraiki 2013-02-18 12:16:33

0

。這是我如何訪問.NET Web服務。在我的情況我發送2個參數的用戶名和密碼,這裏的服務將根據database.If你不傳遞任何參數,請刪除我剛纔提到的參數和只添加這

PropertyInfo pi = new PropertyInfo(); 
    pi.setType(String.class); 
    request.addProperty(pi); 

字符串返回

else

public String Call(String username, String password) { 
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, 
      OPERATION_NAME); 

    PropertyInfo pi = new PropertyInfo(); 
    pi.setName("username"); 
    pi.setValue(username); 
    pi.setType(String.class); 
    request.addProperty(pi); 

    pi = new PropertyInfo(); 
    pi.setName("password"); 
    pi.setValue(password); 
    pi.setType(String.class); 
    request.addProperty(pi); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
      SoapEnvelope.VER11); 

    envelope.dotNet = true; 

    envelope.setOutputSoapObject(request); 

    HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS); 
    Object response = null; 

    try { 

     httpTransport.call(SOAP_ACTION, envelope); 
     response = envelope.getResponse(); 
    } 

    catch (Exception exception) { 
     response = exception.toString(); 
    } 

    return response.toString(); 
} 
+0

我的webservice不需要參數(至少對於HelloWrold方法),但它在訪問它之前需要認證 – Labraiki 2013-02-18 12:11:52

相關問題