Как использовать KSoap для использования служб WCF в Android - PullRequest
0 голосов
/ 25 октября 2018

Использование Ksoap2 для использования сервиса WCf в Android.получение этого ErrorSoapFault - код ошибки: 's: Client' faultstring: 'Неверные данные пользователя.'faultactor: деталь 'null': org.kxml2.kdom.Node@41e72950

try {

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            request.addProperty("Username", "admin");
            request.addProperty("Password", "XXXXX");

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = false;
            envelope.xsd = SoapSerializationEnvelope.XSD;
            envelope.enc = SoapSerializationEnvelope.ENC;
            envelope.setOutputSoapObject(request);
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            androidHttpTransport.call(SOAP_ACTION, envelope);
           // SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
            SoapObject result = (SoapObject) envelope.getResponse();
            //to get the data
            String resultData = result.toString();
            // 0 is the first object of data


            sb.append(resultData + "\n");
        } catch (Exception e) {
            sb.append("Error:\n" + e.getMessage() + "\n");
        }

1 Ответ

0 голосов
/ 25 октября 2018

Судя по вашим ошибкам, клиент должен предоставить учетные данные для аутентификации на сервере.Как сервер аутентифицирует клиента в вашем веб-сервисе?
В общем, мы аутентифицируем клиента с помощью пользовательского заголовка, в то время как SOAPObject устанавливает значение параметра вызывающего метода.
Вы можете обратиться к следующему коду:предоставить идентификационную информацию.

 public static void call(String methodName, SimpleArrayMap<String, Object> mapParams, ResponseCallBack reponseCallBack)
{
    HttpTransportSE transport = new HttpTransportSE(ENDPOINT);
    transport.debug = true;
    Element[] header = new Element[1];
    header[0] = new Element().createElement(NAMESPACE, ID_HEADERNAME);
    Element userName = new Element().createElement(NAMESPACE, ID_NAME_PARAM);
    userName.addChild(Node.TEXT, ID_NAME_VALUE);
    header[0].addChild(Node.ELEMENT, userName);
    Element password = new Element().createElement(NAMESPACE, ID_PASSWORD_PARAM);
    password.addChild(Node.TEXT, ID_PASSWORD_VALUE);
    header[0].addChild(Node.ELEMENT, password);

    SoapObject soapObject = new SoapObject(NAMESPACE, methodName);
    if (mapParams != null)
    {
        for (int index = 0; index < mapParams.size(); index++)
        {
            String key = mapParams.keyAt(index);
            Object value = mapParams.get(key);
            soapObject.addProperty(key, value);
        }
    }
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.headerOut = header;
    envelope.dotNet = isDotNet;
    envelope.bodyOut = soapObject;
    *****
   *****
     }
...