2011-10-06 71 views
0

我已經成功編寫了一個使用Ksoap2調用asp.net web服務的Android應用程序。我現在想要遷移應用程序以使用PHP Web服務。我已經成功將Web服務遷移到本地PHP Web服務(並使用PHP客戶端對其進行了測試),但我無法使用KSOAP調用它。一個讓我感到震驚的是,本地PHP Web服務不是使用wsdl生成的,並且無法自動生成wsdl。 ksoap2是否需要wsdl才能成功調用Web服務方法?Ksoap2是否要求Web服務生成wsdl?

的asp.net web服務位於http://mycomputer/AlumLocateService/Service.asmx

對於成功的調用asp.net服務:

private static final String NAMESPACE = "http://mycomputer/"; 
private static final String URL = "http://mycomputer/AlumLocateService/Service.asmx"; 
private static final String METHOD_NAME_3 = "FindCloseDetails"; 
private static final String SOAP_ACTION_3 = NAMESPACE + METHOD_NAME_3; 

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_3); 
PropertyInfo pi = new PropertyInfo(); 
pi.setName("userid"); 
pi.setValue(userid); 
pi.setType(string.class); 
request.addProperty(pi); 

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.dotNet = true; 
envelope.setOutputSoapObject(request); 
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

androidHttpTransport.call(SOAP_ACTION_3, envelope); 

//Parse Response 
Object myResult = envelope.bodyIn; 
SoapObject resultsRequestSOAP = (SoapObject) myResult; 
String[] results = getStringArrayResponse(resultsRequestSOAP, null); 
return results; 

PHP服務位於http://mycomputer/PHPTest/testserver.php和複製ASP的方法。網絡服務。我曾希望thta所有我woudl需要做的是改變以下

private static final String URL = "http://mycomputer/PHPTest/testserver.php"; 

和刪除行

envelope.dotNet = true; 

但是當我做,我得到「XmlPullParserException:意外的類型(位置END_DOCUMENT空......」當androidHttpTransport.call(SOAP_ACTION_3,信封)調用時

+0

可以使用KSOAP2給出用於調用PHP web服務的代碼 – jennifer

+0

ok,添加了代碼 –

+0

我現在使用Zend_Soap_Server而不是本地SoapServer實現了我的PHP服務。 Zend_Soap_Server能夠自動生成WSDL。 –

回答

0

一個我已經改爲使用PHP Zend_Soap_Server我不得不改變我的Android代碼的最後一部分:

Object myResult = envelope.getResponse(); 
String[] results = null; 
if (myResult instanceof Vector) 
{ 
    Vector<Object> myVector = (Vector<Object>) myResult; 

results = new String[myVector.size()]; 

for (int i = 0; i< myVector.size();i++){ 

    results[i] = myVector.elementAt(i).toString(); 
} 
} 

return results; 
+0

我剛剛檢查過 - 本機php SoapServer也適用於我更改了Android代碼。 –