ANDROID 호출 웹 서비스 테이프 soapheader 인증

8733 단어
최근 프로젝트 에서 웹 서비스 인 터 페 이 스 를 호출 하려 면 soapheader 를 검증 해 야 합 니 다. 현재 해결 방법 은 다음 과 같 습 니 다. (인터넷 자료 출처 가 너무 많 으 면 인용 하지 않 습 니 다. 원작 자 는 보시 다시 피 추가 할 필요 가 있 으 면 알려 주 십시오)
1. 인터페이스 먼저 보기
POST /webserver/ValideWebService.asmx HTTP/1.1
Host: IP  
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://    /Login"

"1.0" encoding="utf-8"?>
"http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  
"http:// /"> string
"http:// /"> string string

 
검증 할 때 header 와 body 두 부분 을 검증 해 야 합 니 다. 제3자 jar 패키지, ksoap 2 - android - assembly - 2.5.2 - jar - with - dependencies. jar 를 도입 해 야 합 니 다.다음은 제 가 사용 하 는 방법 을 검증 하 는 것 입 니 다. 인터넷 에 많은 것 이 있 지만 검증 할 수 없습니다. '가 져 와' 수정 하고 기록 을 해서 나중에 볼 수 있 도록 하 는 것 도 여러분 이 참고 하 시기 편리 합 니 다.
     ;
//    
    private static final String NAMESPACE = "http://    /";
    //    
    private static String URL = "http://IP      /webserver/ValideWebService.asmx";
    //      
    private static final String METHOD_NAME = "Login";
    //       +   
    private static String SOAP_ACTION = "http://    /Login";
    private SoapObject  detail;

2.3 이상 메 인 스 레 드 에서 네트워크 에 직접 접근 할 수 없 기 때문에 필요 한 곳 에서 키 스 레 드 를 엽 니 다. 여 기 는 제 가 단 추 를 누 르 고 로그 인 할 때 필요 하기 때문에 onclick () 방법 에 적 습 니 다.
new Thread() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub  
                    super.run();
                    try {
                        SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
                        //  2 propertyinfo, Login       ,      asmx  
                        PropertyInfo pi = new PropertyInfo();
                        pi.setName("loginName");
                        pi.setValue(cardNumStr);
                        rpc.addProperty(pi);
                        pi=new PropertyInfo();
                        pi.setName("passowrd");
                        pi.setValue(passwordStr);
                        rpc.addProperty(pi);
                        //soapheader   
                        Element[] header = new Element[1];
                        header[0] = new Element().createElement(NAMESPACE, "MySoapHeader");
                        Element username = new Element().createElement(NAMESPACE, "ProjectID");
                        username.addChild(Node.TEXT, "    ");
                        header[0].addChild(Node.ELEMENT, username);
                        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                        envelope.headerOut = header;
                        envelope.bodyOut = rpc;
                        envelope.dotNet = true;
                        envelope.setOutputSoapObject(rpc);
                        HttpTransportSE ht = new HttpTransportSE(URL);
                        ht.call(SOAP_ACTION, envelope);
                        //SoapObject
                        detail =(SoapObject) envelope.getResponse();
                        System.out.println("     "+ detail.toString());
                    }catch (Exception e){
                        System.out.println("    :"+ e.getMessage());
                    }
                    Message msg = handler.obtainMessage();
                    msg.obj=detail;
                    handler.sendMessage(msg);
                }
            }.start();

위의 cardNumStr 와 passwordStr 는 내 가 텍스트 입력 상자 에서 가 져 온 값 이다.네트워크 를 방문 하여 인터페이스 에서 검증 을 통 해 반환 값 을 얻 고 되 돌아 오 는 데 이 터 를 처리 하면 됩 니 다.
SoapObject 를 사용 합 니 다. 되 돌아 오지 않 는 detail 은 null 입 니 다.
 
private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            //     UI     
        };
    };

좋은 웹페이지 즐겨찾기