如何使用KSoap在Android中使用WCF服务

时间:2018-10-25 07:58:07

标签: android wcf soap-client ksoap2 android-ksoap2

使用Ksoap2在Android中使用WCf服务。获取此ErrorSoapFault-错误代码:'s:Client'错误字符串:'无效的用户详细信息'。 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 :(得分:0)

根据您的错误,客户端似乎需要提供凭据才能由服务器进行身份验证。服务器如何在您的Web服务中对客户端进行身份验证?
通常,我们通过自定义标头对客户端进行身份验证,而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;
    *****
   *****
     }
相关问题