What's the namespace, soap action and url should be for my android app accessing wcf web service?
Asked Answered
T

2

9

My WSDL is like:

    <?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>

I am wondering what should I put for my SOAP_ACTION, METHOD_NAME, NAMESPACE and URL? I guess:

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

But it seems not working in my code:

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();

It goes into exception at line androidHttpTransport.call(SOAP_ACTION, envelope); the exception object e has value null.

I have add

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

in the Manifest file

Can anyone tell me what's wrong?

Thank you very much.

Tungus answered 18/7, 2012 at 10:49 Comment(4)
Is there any good tutorial or code sample with both wcf web service also the ksoap2 access client for reference?Tungus
you got the solution for this issue?Gratt
First Add a / after the namespace and tryAdequacy
This is a offtopic, but instead of trying to create code for web service connection manually, you can try to use some online generator which will speed up your work. Personally I've used easywsdl.com and I had working code in a few seconds. You can also find other online generators if you want.Likely
F
0

You can use WCFTestClient and click on XML tab in bottom. You can find the information your are looking (SOAP URL and Action). I hope this will help.

Fathom answered 9/10, 2014 at 23:58 Comment(0)
J
0

well im doing it like this

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

and in the android client

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) code:

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";


   }

the wcf returns a 1 or nothing depeding if the user and password are ok..

hope this helps you

Jackscrew answered 9/1, 2015 at 5:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.