2012-08-01 3 views
0
내가 안드로이드에 CrmDiscoveryService에 연결 ksoap을 사용하고

에 CrmDiscoveryService에 연결 ksoap를 사용할 때 요청을 처리 할 수 ​​없습니다, 여기에 문제가 온다 '비누 : 서버' faultstring : '서버가 요청을 처리 할 수 ​​없습니다.' faultactor : '널 (null)'세부 : [email protected]SOAPFault에-서버가 안드로이드

//here is namespace,endpoint,soapaction and methodname 

public final static String DISCOVERY_NAMESPACE = "http://schemas.microsoft.com/crm/2007/CrmDiscoveryService/"; 

public final static String DISCOVERY_ENDPOINT_URL = "https://dev.crm5.dynamics.com/MSCRMServices/2007/Passport/CrmDiscoveryService.asmx"; 

public final static String SOAPACTION = "http://schemas.microsoft.com/crm/2007/CrmDiscoveryService/Execute"; 

private String MethodName = "Execute"; 

//below is the code connectting to crmdiscoveryservice 

SoapObject rpc = new SoapObject(DISCOVERY_NAMESPACE, MethodName); 

RetrievePolicyRequest retrievePolicyRequest = new RetrievePolicyRequest(); 

PropertyInfo info = new PropertyInfo(); 

info.name = "parameters"; 
info.type = retrievePolicyRequest.getClass(); 
info.setValue(retrievePolicyRequest); 
rpc.addProperty(info); 

HttpTransportSE ht = new HttpTransportSE(DISCOVERY_ENDPOINT_URL); 

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

envelope.dotNet = true; 
envelope.encodingStyle = "utf-8"; 
envelope.setOutputSoapObject(rpc); 

try { 
    ht.call(SOAPACTION, envelope); 

    if (envelope.getResponse() != null) { 
     SoapPrimitive response = (SoapPrimitive) envelope.bodyIn; 
     Log.e(tag, response.toString()); 
    } 

} catch (IOException e) { 
     e.printStackTrace(); 
} catch (XmlPullParserException e) { 
    e.printStackTrace(); 
} 

그리고 나 자신 RetrievePolicyRequest 정의했다. 나는 여러 번 시도했지만, 여전히이 문제를 가지고 있으며, 어떤 사람들은이 문제를 해결하는 방법을 알고 있습니까?

감사합니다.

답변

0

다음은 내가 코드에 잘못 될 수 있다고 생각하는 것입니다.

  1. 잘못된 propertyinfo.name을 사용했을 수 있습니다. 예를 들어 htt (REMOVE THIS) ps : //dev.crm5.dynamics.com/MSCRMServices/2007/Passport/CrmDiscoveryService.asmx? WSDL을 보면, 당신이 info.name = "Request";을 원하는 것처럼 보일 것입니다. 이것이 사실이라면 복잡한 유형 클래스를 요청으로 수정해야합니다.

  2. info.type = retrievePolicyRequest.getClass();과 함께 속성 유형으로 클래스를 추가하더라도 (이는 아직 이해가 안되는 이유로) 충분하지 않습니다. 이 클래스를 봉투에 "맵핑"해야합니다. 당신이

    envelope.dotNet = "true"; 
    envelope.encodingStyle = "utf-8"; 
    envelope.setOutputSoapObject(rpc); 
    envelope.addMapping(DISCOVERY_NAMESPACE, "Request", new Request().getClass()); 
    

사람들은 내가 deffinately 당신을 도울 것입니다 몇 가지 여기에 바로 볼 수있는 일이있을 것을 의미 (그들은 나에게 이런 비누 통화 톤 도움).

먼저, 당신은 soapUI를 체크 아웃해야합니다. 14 일 평가판을 시작할 수 있습니다. 이를 통해 soapUI가 wsdl url을 가리킬 수 있으며 메서드 호출을 테스트 할 수 있습니다 (요청이 어떻게 보이는지 쉽게 볼 수 있고 반환 된 XML이 어떻게 보이는지 확인할 수 있습니다). http://www.soapui.org/. 이 프로그램은 말 그대로 방법이 무엇인지, 네임 스페이스가 무엇인지, URL이 무엇인지, soap11 또는 soap12 ... 등을 사용 하는지를 철자합니다. 사용하십시오!

둘째, 이와 같은 복잡한 유형의 경우이 튜토리얼은 http://seesharpgears.blogspot.com/2010/10/ksoap-android-web-service-tutorial-with.html입니다. 키보드에서 머리를 두드리는 것에서부터이 튜토리얼을 읽고 처음으로 코드 작업을 해보기로했습니다.

행운을 빌어 요, 더 많은 도움이 필요하면 게시하십시오! =)

  • 조이