0
我有webservice,有多個方法。我使用firefox soaclient插件來測試它們。所有方法都正常工作。直到現在這些都是正常的。我在android上編寫了用於調用這些.net webservice的庫。我有辦法,先準備一個信封,另一個叫方法。除此之外的所有方法都以這種方式工作。我準備從我的lib的信封準備的方法,它不起作用,並在firefox soap客戶端上使用此信封,它以正確的方式返回我的回覆。我自己調用Web服務的方法不會工作錯誤,只是返回空結果。什麼可能是錯誤?爲什麼webservice不能手動工作?
private void createEnvelope() {
// Her bir parametrenin kalıbı
String params = "<%s>%s</%s>";
// Her parametre kalıbına değer atandığında geçici olarak tutulan string
String paramsTemp = "";
// Hazırlanan tüm parametrelerin tutulduğu değişken
String paramsAll = "";
// Parametreler ekleniyor
for (int i = 0; i < parameterKeys.size(); i++) {
paramsTemp = String.format(params, parameterKeys.get(i),
parameterValues.get(i), parameterKeys.get(i));
paramsAll += paramsTemp;
}
// soap mesajını hazılıyoruz
String soapTemplate = "<?xml version=\"%s\" encoding=\"%s\"?>"
+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+ "<soap:Body>" + "<%s xmlns=\"%s\">" + "%s" + "</%s>"
+ "</soap:Body>" + "</soap:Envelope>";
envelope = String.format(soapTemplate, version, charEncoding,
methodName, namespace, paramsAll, methodName);
Logger.log("request:" + envelope);
}
public String callWebService() {
createEnvelope();
// request parameters
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, connectionTimeOut);
HttpConnectionParams.setSoTimeout(params, soTimeOut);
// set parameter
HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), true);
// POST the envelope
HttpPost httppost = new HttpPost(url);
// add headers
httppost.setHeader("SOAPAction", soapAction);
httppost.setHeader("Content-Type", contentType);
try {
// the entity holds the request
HttpEntity entity = new StringEntity(envelope);
httppost.setEntity(entity);
// Response handler
ResponseHandler<String> rh = new ResponseHandler<String>() {
// invoked when client receives response
public String handleResponse(HttpResponse responseTemp)
throws ClientProtocolException, IOException {
// get response entity
HttpEntity entity = responseTemp.getEntity();
StatusLine statusLine = responseTemp.getStatusLine();
// read the response as byte array
StringBuffer out = new StringBuffer();
byte[] b = EntityUtils.toByteArray(entity);
// write the response byte array to a string buffer
out.append(new String(b, 0, b.length));
return out.toString();
}
};
response = httpClient.execute(httppost, rh);
} catch (Exception e) {
Log.v("Soap Service Exception:", e.toString());
}
// close the connection
httpClient.getConnectionManager().shutdown();
return response;
}
編輯上的logcat
請求模板:在logcat的F上
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Method_Name_Response xmlns="url">
<Method_Name_Result>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Temp">
<xs:complexType>
<xs:sequence>
<xs:element name="response1" type="xs:long" minOccurs="0" />
<xs:element name="response2" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" />
</Method_Name_Result>
</Method_Name_Response>
</soap:Body>
</soap:Envelope>
響應模板
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Method_Name xmlns="url">
<param1>12345</param1>
<param2>ügıtç</param2>
<param3>qwert</param3>
</Method_Name>
</soap:Body>
</soap:Envelope>
響應模板具有相同信封的irefox插件
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Method_Name_Response xmlns="url">
<Method_Name_Result>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Temp">
<xs:complexType>
<xs:sequence>
<xs:element name="response1" type="xs:long" minOccurs="0" />
<xs:element name="response2" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<NewDataSet xmlns="">
<Temp diffgr:id="Temp1" msdata:rowOrder="0">
<response1>123456789</response1>
<response2>Android</response2>
</Temp>
</NewDataSet>
</diffgr:diffgram>
</Method_Name_Result>
</Method_Name_Response>
</soap:Body>
</soap:Envelope>
發佈您的'logcat'並且如果可能'wireshark'轉儲。 – PCoder
我使用模板結果編輯我的問題。由於信息的隱私,我無法分享原始結果。 –