Требуется помощь в решении проблемы с Webservice - PullRequest
0 голосов
/ 22 октября 2010

Привет. Я пытаюсь войти в систему продаж через веб-сервис на платформе Android. Но я сталкиваюсь с некоторыми проблемами. Я получаю «Исключение сокета: истекло время ожидания операции» . Я использую мыльный код Ksoap2, портированный для Android, и подробности WSDL взяты из WSDL партнера моей учетной записи разработчика в Salesforce. Я активировал «доступ к API». Также имя пользователя и пароль действительны. Я пытаюсь сделать это через среду разработки (Eclipse) на моем эмуляторе для Android для настольных компьютеров.
Может кто-нибудь, пожалуйста, помогите мне выяснить, если я что-то упустил и решить эту проблему.
Ниже приведен исходный код:

import android.app.Activity;
//Soap imports
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

//Android Imports
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import org.xmlpull.v1.*;
import java.io.IOException;


import android.os.Bundle;

public class SalesForceLogin extends Activity 
{
    private static final String NAMESPACE = "urn:sobject.partner.soap.sforce.com";
    private static final String URL = "https://login.salesforce.com/services/Soap/c/20.0";
    private static final String SOAP_ACTION = "";
    private static final String TAG = "SALESFORCE-SERVICE";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //New
        SoapObject binding = new SoapObject(NAMESPACE, "login");
        binding.addProperty("username", "username"); //Valid username
        binding.addProperty("password", "password"); //Valid password appended by security token
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

        envelope.setOutputSoapObject(binding);
        AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
        androidHttpTransport.debug = true; 
        SoapObject result=null;
        try 
        {
            androidHttpTransport.call(SOAP_ACTION, envelope);
            result = (SoapObject)envelope.getResponse();
            // At this point, Soap login success.
            Log.v(TAG, result.toString());
            Object serverUrl=result.getProperty("serverUrl");
            Log.v(TAG,"serverUrl="+serverUrl);
            Object passwordExpired=result.getProperty("passwordExpired");
            Log.v(TAG,"passwordExpired="+passwordExpired); 
            Log.v(TAG, "Ending Login with Success.");

        } 
        catch (SoapFault aSoapFault) 
        {
            Log.d(TAG, "SoapFault actor="+aSoapFault.faultactor);
            Log.d(TAG, "SoapFault code="+aSoapFault.faultcode);
            Log.d(TAG, "SoapFault message="+aSoapFault.faultstring);
            // do something – Soap Fault occurred
        }
        catch (XmlPullParserException reso)
        {
            Log.v(TAG, "XmlPullParserException");
            reso.printStackTrace();
        }
        catch (IOException reso) //Socket Exception caught here!
        {
            Log.v(TAG, "IOException");
            reso.printStackTrace();
        }

    }
}

Редактировать: Для справки любого, кто ссылается на эту ветку, я смог запустить вышеупомянутый веб-сервис, проблема заключалась в несоответствии между URL-адресом и пространством имен. Со следующими модификациями приведенный выше код работает отлично.

NAMESPACE = "urn:partner.soap.sforce.com";
URL = "https://login.salesforce.com/services/Soap/u/20.0";
SOAP_ACTION = "soap";

Ответы [ 2 ]

2 голосов
/ 22 октября 2010

Проблемы с маршрутизацией?(т.е. переадресация портов, прокси, брандмауэры и т. д.)

1 голос
/ 22 октября 2010

У меня есть некоторый опыт использования Ksoap2-Android для веб-сервисов .NET, и первое, что я могу вам сказать, это то, что они в лучшем случае сложны. Я молюсь, чтобы в будущем Google сделал родного мыльного клиента ...

Что касается вашей проблемы, трудно сказать, что может быть не так, не зная подробностей о вашем веб-сервисе. Исключение SocketException может создаваться при создании сокета или настройке параметров (см. google api ). Скорее всего, вы используете неправильный URL или пространство имен.

Я бы также предложил использовать перехватчик пакетов (wireshark хорош для этого), чтобы вы могли видеть, как на самом деле выглядят ваши запросы мыла. Затем вы можете сравнить это с тем, что ожидает сервис, и отрегулировать его оттуда.

Удачи! дайте мне знать, если я могу помочь больше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...