显然,这是一个经常遇到的问题。我不完全确定问题出在哪里,或者需要调整什么,但对于我的生活,除了 NULL 结果之外,我无法从我的 .NET XML Web 服务中检索到带有参数的 SoapObject 或 SoapPrimitive 的任何结果。
我已经尝试了我在网上找到的所有内容:
- 添加 .setXmlVersionTag = 没有变化
- 使用 SoapObject 代替 SoapPrimitive = 没有变化
- 使用 SoapPrimitive 代替 SoapObject = 没有变化
- 使用 HttpTransportSE 而不是 AndroidHttppTransport = 没有变化
- 使用 AndroidHttpTransport 代替 HttpTransportSE = 没有变化
- 设置 .dotNet = true = 没有变化
- 删除 .dotNet 分配行 = 没有变化
- 从 Web 服务中删除冒号(整个 HTTP:// 前缀)= 没有变化
- 使用 PropertyInfo 类而不是直接赋值 = 没有变化
- 使用直接赋值而不是 PropertyInfo 类 = 没有变化
我完全不知所措,这非常令人沮丧。我完全控制了网络服务(我写了它),所以如果有帮助,我愿意尝试。
目前我的代码如下:
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";
我知道 'yoda' 翻译正确,因为我的非参数化网络服务工作得像一个血腥的冠军。(除了 'request.addProperty' 调用之外,一切都是相同的,这显然是手头问题的(部分或全部)。)
如果这很重要,我将针对具有 KSoap2 2.5.2 的 1.6 目标平台编写此代码,并且它在我所有不同的 Android 模拟器中的行为相同。
我用wireshark嗅探了数据包,模拟器似乎正在发送正确的东西,但它收到的结果总是NULL。(我已经针对使用这些 Web 服务的测试网站多次测试了这些确切的参数,并且在那里一切正常。)
那么,有人可以在这里给我扔一根骨头吗?
谢谢,
马瓜
编辑 2010.11.28:
尽管 Wireshark 告诉我我正在发送参数,但 Web 服务似乎没有正确接收它们,或者类似的东西。我创建了一个全新的服务,它假设返回一个简单的字符串,无论第一个参数是什么,最后都是“TEST”,是从 Web 服务本身硬编码的。
好吧,每次我(从Android)运行它时,我都会得到一个结果,而且它总是“TEST”。无论我如何制定 SoapEnvelope 或无论我作为参数传递什么,我总是收到“TEST”。当然,当我在服务器上调用 Web 服务时,它就像冠军一样工作(我的结果是“这是一个测试”)。
我的 Web 服务在带有 IIS 7 的 Windows Server 2008 上。应用程序池正在使用“集成”托管管道模式针对框架 v2.0(不是 v4.0)运行。
我不知道脱节在哪里。KSoap2 是否不正确地发送参数?IIS 是否配置不正确?完全不同的东西?