Использование службы WCF через KSOAP2 на Android приводит к ошибкам - PullRequest
0 голосов
/ 01 марта 2012

У меня есть следующее WCF webservice

Я хочу использовать его в клиенте Android. Мой код до сих пор

public class SOAP_TestActivity extends Activity {

  private final String NAMESPACE = "http://tempuri.org/";
  private final String URL = "http://50.19.226.15/Office365Admin/MsOnline.svc";
  private final String SOAP_ACTION = "http://tempuri.org/IMsOnline/ValidateUser";
  private final String METHOD_NAME = "ValidateUser";


  private final  String user_id= "khurram@office365trial.com.au";
  private final  String password= "friday@123";

  @Override
   public void onCreate(Bundle savedInstanceState)
      {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button signin = (Button) findViewById(R.id.regsubmitbtn);
        signin.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {

                        boolean auth=doLogin();
                        System.out.println(auth);
                        Toast.makeText(getApplicationContext(), String.valueOf(auth), Toast.LENGTH_SHORT).show();

                }
           });   
     }

    private boolean doLogin() {   

   boolean result=false;

   SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

   request.addProperty("userid", user_id);
   request.addProperty("password",password);

   SoapSerializationEnvelope envelope = new   SoapSerializationEnvelope(SoapEnvelope.VER11);

   envelope.dotNet = true;         

   envelope.setOutputSoapObject(request);

   Log.d("myApp", request.toString());
   System.out.println(request);

   HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
   androidHttpTransport.debug = true;

   try {
           androidHttpTransport.call(SOAP_ACTION, envelope);

           SoapPrimitive soapPrimitiveResults = (SoapPrimitive)envelope.getResponse();                        

           Log.d("myApp", soapPrimitiveResults.toString());
           System.out.println("myApp" +soapPrimitiveResults);

                   if(soapPrimitiveResults.toString().equalsIgnoreCase("true"))
       {
                   result = true;

       }

   }catch(SocketException ex)
   {
       Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage());
       ex.printStackTrace();
   }
   catch (Exception e) {
       Log.e("Error : " , "Error on soapPrimitiveData() " + e.getMessage());
           e.printStackTrace();
   }
   return result;

   }
   }

Этот код работает без каких-либо исключенийно я не могу войти в свое приложение, так как метод ValidateUser всегда возвращает false. Этот же веб-сервис используется в Windows Phone и работает без проблем. Также имя пользователя и пароль верны на 100%.

Похоже, есть проблемы в NAMESPACE и SOAP_ACTION.Я прошел некоторые уроки, и они говорят, что SOAP_ACTION сделан путем объединения NAMESPACE с METHOD_NAME. Так что, если я буду следовать учебным пособиям, мой SOAP_ACTION должен быть

"http://tempuri.org/ValidateUser"

, но SOAP_ACTION, указанное в WSDL link для метода "ValidateUser", равно

"http://tempuri.org/IMsOnline/ValidateUser".

Я новичок в веб-сервисах WCF и SOAP.Как реализовать методы, приведенные в WSDL Document(link is at the top).Похоже, упустил что-то важное, но не знаю что.

Ответы [ 2 ]

1 голос
/ 27 октября 2012

Если тот же веб-сервис работает нормально с Windows Phone, то у вас есть проблема с NameSpace, и метод веб-сервиса не получает параметры из сообщения SOAP.А поскольку ваш ValidateUser не получает параметров, он просто возвращает ноль / ложь.

У меня была такая же проблема.Я решил это путем явного определения пространства имен и, следовательно, избавления от наборов WCF для пространства имен по умолчанию, tempuri.org

Вот мое решение для справки:

передача объектов в службу wcf soap изAndroid с помощью ksoap2;отправляет и получает 0

0 голосов
/ 02 марта 2012

Попробуйте это:

...

Object response = envelope.getResponse();
String value = response.toString();

...
...