2012-07-18 17 views
9

WSDL của tôi là như sau:Không gian tên, hành động xà phòng và url nào nên cho ứng dụng Android của tôi truy cập vào dịch vụ web wcf?

<?xml version="1.0" encoding="utf-8"?> 
    <wsdl:definitions name="ABCWcfService" targetNamespace="http://www.ABC.com/ABCWcfService" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://www.ABC.com/ABCWcfService" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> 
     <wsdl:types> 
     <xsd:schema targetNamespace="http://www.ABC.com/ABCWcfService/Imports"> 
      <xsd:import schemaLocation="http://desktop/ABCWcfService/ABCWcfService.svc?xsd=xsd0" namespace="http://www.ABC.com/ABCWcfService"/> 
      <xsd:import schemaLocation="http://desktop/ABCWcfService/ABCWcfService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/> 
     </xsd:schema> 
     </wsdl:types> 
     <wsdl:message name="IABCWcfService_GetWhatsOnData_InputMessage"> 
     <wsdl:part name="parameters" element="tns:GetWhatsOnData"/> 
     </wsdl:message> 
     <wsdl:message name="IABCWcfService_GetWhatsOnData_OutputMessage"> 
     <wsdl:part name="parameters" element="tns:GetWhatsOnDataResponse"/> 
     </wsdl:message> 
     <wsdl:portType name="IABCWcfService"> 
     <wsdl:operation name="GetWhatsOnData"> 
      <wsdl:input wsaw:Action="http://www.ABC.com/ABCWcfService/IABCWcfService/GetWhatsOnData" message="tns:IABCWcfService_GetWhatsOnData_InputMessage"/> 
      <wsdl:output wsaw:Action="http://www.ABC.com/ABCWcfService/IABCWcfService/GetWhatsOnDataResponse" message="tns:IABCWcfService_GetWhatsOnData_OutputMessage"/> 
     </wsdl:operation> 
     </wsdl:portType> 
     <wsdl:binding name="BasicHttpBinding_IABCWcfService" type="tns:IABCWcfService"> 
     <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> 
     <wsdl:operation name="GetWhatsOnData"> 
      <soap:operation soapAction="http://www.ABC.com/ABCWcfService/IABCWcfService/GetWhatsOnData" style="document"/> 
      <wsdl:input> 
      <soap:body use="literal"/> 
      </wsdl:input> 
      <wsdl:output> 
      <soap:body use="literal"/> 
      </wsdl:output> 
     </wsdl:operation> 
     </wsdl:binding> 
     <wsdl:service name="ABCWcfService"> 
     <wsdl:port name="BasicHttpBinding_IABCWcfService" binding="tns:BasicHttpBinding_IABCWcfService"> 
      <soap:address location="http://desktop/ABCWcfService/ABCWcfService.svc"/> 
     </wsdl:port> 
     </wsdl:service> 
    </wsdl:definitions> 

tôi tự hỏi những gì tôi nên đặt cho SOAP_ACTION tôi, METHOD_NAME, namespace và URL? Tôi đoán:

SOAP_ACTION = "http://www.ABC.com/ABCWcfService/IABCWcfService/GetWhatsOnData" 
METHOD_NAME = "GetWhatsOnData" 
NAMESPACE = "http://www.ABC.com/ABCWcfService" 
URL = "http://desktop/ABCWcfService/ABCWcfService.svc" 

Nhưng nó dường như không làm việc trong mã của tôi:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.dotNet = true; 
envelope.setOutputSoapObject(request); 
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
androidHttpTransport.call(SOAP_ACTION, envelope); 
SoapObject result = (SoapObject) envelope.getResponse(); 

Nó đi vào ngoại lệ tại dòng androidHttpTransport.call (SOAP_ACTION, phong bì); đối tượng ngoại lệ e có giá trị null.

tôi có thêm

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

trong file Manifest

bất cứ ai có thể cho tôi biết chuyện gì vậy?

Cảm ơn bạn rất nhiều.

+0

Có mẫu hướng dẫn hay mã nào tốt cho cả dịch vụ web wcf cũng là ứng dụng truy cập ksoap2 để tham khảo không? –

+0

bạn có giải pháp cho vấn đề này? –

+0

Đầu tiên Thêm/sau khi không gian tên và thử –

Trả lời

0

Bạn có thể sử dụng WCFTestClient và nhấp vào tab XML ở dưới cùng. Bạn có thể tìm thấy thông tin bạn đang tìm kiếm (URL SOAP và Hành động). Hy vọng điều này có thể giúp cho bạn.

0

im cũng làm việc đó như thế này

[OperationContract] 
    [WebInvoke(Method = "GET", 
       RequestFormat = WebMessageFormat.Json, 
       ResponseFormat = WebMessageFormat.Json, 
       UriTemplate = "/Login?ID={ID}&PASSWORD={PASSWORD}")] 
    System.IO.Stream ValidarLogin(int ID, string PASSWORD); 

và trong client android

class MiTareaAsincrona extends AsyncTask<Void, Integer, String> { 
    ProgressDialog dialog=null; 


protected void onPreExecute() { 
    dialog = new ProgressDialog(MainScreen.this); 
    dialog.setMessage("Verificando sus datos.. "); 
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    // dialog.setMax(100); 
    dialog.setCancelable(false); 
    dialog.show(); 

    } 


    @Override 
    protected String doInBackground(Void... params) { 


     final EditText text1 = (EditText) findViewById(R.id.editText1); 
     final EditText text2 = (EditText) findViewById(R.id.editText2); 
    String Cedula= text1.getText().toString(); 
    String Password = text2.getText().toString(); 


    final String URL = "https://MYURL.COM/NGLOGIN/NGLogin.svc/Login?ID="+Cedula+"&PASSWORD="+Password; 

    if(!Cedula.equals("") || !Password.equals("")){ 

       try { 
         key=ValidarLogin(URL); 


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

         key="noinet"; 
        } catch (JSONException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

    // this.cancel(true); 
    } 

    return key; 

    } 




    @Override 
    protected void onPostExecute(String result) { 
     String a= result.toString(); 
     Boolean aa= " ".equals(result); 

     if(!result.equals("false") & !result.equals("noinet")){ 
      dialog.dismiss(); 
     finalizo=true; 
     if(finalizo){ 
       Intent intent = new Intent(getApplicationContext(), MainMenu.class); 
       intent.putExtra("llave", key); 
       startActivity(intent);} 

ValidarLogin (URL) mã:

public String ValidarLogin (String URL) throws ClientProtocolException, IOException, JSONException 
    { 

     Security.addProvider(new BouncyCastleProvider()); 

     HttpClient client = new MyHttpsClient(getApplicationContext()); 

     HttpGet get = new HttpGet(URL); 
     HttpResponse response = client.execute(get); 

     int status = response.getStatusLine().getStatusCode(); 

     if(status == 200) //sucess 
     { 
      HttpEntity e = response.getEntity(); 
      String key = EntityUtils.toString(e); 
     // get.abort(); 
     /*/ char[] arreglo = key.toCharArray(); 
     char[] arreglo2= new char[arreglo.length-2]; 

     for(int x=1; x<arreglo.length-1;x++){ 

      arreglo2[x-1] = arreglo[x]; 

     } 

     /*/ 

      if(!key.equals("")){return key;} 
      return "false"; 

     } 

      return "false"; 


    } 

các WCF trả về một 1 hoặc không có gì depeding nếu người dùng và mật khẩu là ok ..

hy vọng điều này sẽ giúp bạn

Các vấn đề liên quan