顯然這是一個相當經常遇到的問題。我不確定問題出在哪裏,或者需要調整什麼,但是對於我的生活,我無法從帶有參數的.NET XML Web服務的SoapObject或SoapPrimitive中檢索除NULL結果以外的任何內容。Android,KSoap2和.NET Web服務w/parameters = NULL結果
我嘗試了一切,我在網上發現:
- 添加.setXmlVersionTag =無變化
- 使用SoapObject代替SoapPrimitive =無變化
- 使用SoapPrimitive代替SoapObject =沒有變化
- 使用HttpTransportSE代替AndroidHttppTransport =無變化
- 使用AndroidHttpTransport代替HttpTransportSE =無變化
- 設置.dotNet =真=無變化
- 卸下.dotNet分配線=無變化
- 卸下結腸(整個HTTP://前綴)從web服務=無變化
- 使用的PropertyInfo類,而不是直接賦值=無變化
- 使用直接分配,而不是的PropertyInfo類=無變化
我在一個總損失這是相當令人沮喪。我完全控制了Web服務(我寫了它),所以稍作改動,如果有幫助,我願意嘗試。
目前如下我的代碼是這樣的:
public void GetResults()
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("lastName", "sm");
request.addProperty("middleName", "");
request.addProperty("firstName", "");
request.addProperty("pageSize", 25);
request.addProperty("pageNumber", 1);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
//AndroidHttpTransport aht = new AndroidHttpTransport(URL);
HttpTransportSE aht = new HttpTransportSE(URL);
try
{
aht.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
aht.call(SOAP_ACTION, soapEnvelope);
//SoapObject result = (SoapObject)soapEnvelope.bodyIn;
SoapObject result = (SoapObject)soapEnvelope.getResponse();
//SoapPrimitive result = (SoapPrimitive) soapEnvelope.getResponse();
//Object result = soapEnvelope.getResponse();
Log.d("WS", String.valueOf(result));
}
catch(Exception e)
{
e.printStackTrace();
}
}
和我的全局是這樣的:
private static final String SOAP_ACTION = "http://yoda/SearchPerson";
private static final String METHOD_NAME = "SearchPerson";
private static final String NAMESPACE = "http://yoda/";
private static final String URL = "http://yoda/ws.asmx";
我知道「尤達」被正確地翻譯爲我的非參數化網絡serivce是像一個血腥的冠軍一樣工作。(除了'request.addProperty'調用之外,一切都是完全相同的,這些調用顯然是(部分或全部)手頭問題。)
如果很重要我正在使用KSoap2 2.5.2針對1.6目標平臺它在我所有不同的Android模擬器中的表現完全相同。
我用wireshark嗅探了數據包,模擬器看起來正在發送正確的東西,但它收到的結果始終爲NULL。 (我測試過這些確切的參數多次對我的測試網站,使用這些網絡服務,並在所有工作完美的地方。)
所以,任何人都可以在這裏扔我骨頭?
感謝,
Magua
編輯2010.11.28:
即使Wireshark是告訴我,我送參數它似乎是Web服務不接收他們正確,或類似的東西。我創建了一個全新的服務,假設返回一個簡單的字符串,無論第一個參數是什麼,最後都是「TEST」,從Web服務本身進行硬編碼。嗯,每次我運行這個(從Android)我都會得到一個結果,它總是「測試」。無論我如何制定SoapEnvelope或無論我通過什麼參數,我總是會收到「TEST」。當然,當我調用服務器上的Web服務時,它就像一個冠軍(我的結果是「這是一個測試」)。
我的web服務位於帶有IIS 7的Windows Server 2008上。應用程序池針對框架v2.0(不是v4.0)與「集成」託管管道模式運行。
我不知道斷開連接在哪裏。 KSoap2是否發送不正確的參數? IIS配置不正確?還有其他的東西嗎?
你在這兩方面都絕對正確。 SOAP很陳舊,不幸的是我對WCF和REST服務沒有足夠的知識或經驗來完成轉換。 (除非你知道我沒有找到一個驚人的教程...) – Magua 2010-11-28 07:36:33