Android-клиент для WCF wshttpbinding с токеном имени пользователя

1

Я пытаюсь развернуть клиент Android 3.0 для WCF WS-Security. WCF WS реализует токен имени пользователя в качестве доступа к безопасности. Я использую KSOAP2, и у меня нет проблем с доступом к службе asmx, но когда я пытаюсь сделать вызов WCF WS, приложение выдает это исключение:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: привязка привязки для пути сертификации не найдена.

Похоже, что это учетные данные сертификата, но я добавил учетные данные сервера в хранилище ключей, которое использует мой проект.

Это код моего клиента:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.setProperty("http.keepAlive", "false");
    try {
    /**String NAMESPACE = "http://tempuri.org/";
    String URL = "http://**host**/ObtenerDatos/ServicioDatos.asmx";
    String METHOD_NAME = "SumadorDatos";
    String SOAP_ACTION = "http://tempuri.org/SumadorDatos";*/
    String NAMESPACE = "https://tempuri.org/";
    String URL = "http://**host**//WCFServicio/SWObtenerDatos.svc";
    URL url = new URL(URL);
    String METHOD_NAME = "MetodoEnWS";
    String SOAP_ACTION = "http://tempuri.org/IObtenerDatos/MetodoEnWS";
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);      
    request.addProperty("xmlPeticion","dato");
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();     
    StrictMode.setThreadPolicy(policy); 

    KeepAliveHttpsTransportSE transporte = new KeepAliveHttpsTransportSE(url.getHost(),url.getPort(),"",6000);
    try{

        transporte.call(SOAP_ACTION, envelope);

    try {
        SoapPrimitive resultado = (SoapPrimitive)envelope.getResponse();
        String res = resultado.toString();
        TextView tv = new TextView(this);
        tv.setText("El Resultado es: " + res);       
        setContentView(tv);
    } catch (SoapFault e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    } catch (MalformedURLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } 
    }catch(Exception ex){
        ex.printStackTrace();
        this.closeContextMenu();
    }


}

Второй вопрос.

Я не знаю, как отправить на сервер токен и пароль пользователя в голову. Должен ли я создать мыльный конверт для себя, добавляя заголовки, или существует такой метод, как.net, где я указываю значение имени пользователя и передаю его конкретным объектам?

Теги:
client
wcf

1 ответ

0

Чтобы добавить свойство в заголовок, вы должны сделать что-то вроде этого:

     Element[] header = new Element[2];  
     header[0] = new Element().createElement(NAMESPACE, "username");                 
     header[0].addChild(Node.TEXT, "Your username");

     header[1] = new Element().createElement(NAMESPACE, "password");                
     header[1].addChild(Node.TEXT, "Your Password");

     envelope.headerOut = header;                                 

Для сертификата вы можете добавить эту строку:

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    conn.setHostnameVerifier(new HostnameVerifier() {
        @Override
        public boolean verify(String arg0, SSLSession arg1) {
            return true;
        }
    });

Таким образом, вы принимаете весь сертификат

Ещё вопросы

Сообщество Overcoder
Наверх
Меню