Mag*_*gua 6 parameters android soap web-services ksoap2
显然,这是一个经常遇到的问题.我不确定问题所在的位置,或者需要调整的地方,但对于我的生活,除了带有参数的.NET XML Web服务的SoapObject或SoapPrimitive,我无法检索除NULL结果之外的任何内容.
我已经尝试过我在网上找到的所有内容:
我完全失去了,这令人非常沮丧.我完全控制了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();
}
}
Run Code Online (Sandbox Code Playgroud)
我的全局变量看起来像这样:
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";
Run Code Online (Sandbox Code Playgroud)
我知道'yoda'正在翻译,因为我的非参数化网络服务就像一个血腥的冠军.(除了'request.addProperty'调用之外,一切都是相同的,这显然是(部分或全部)手头的问题.)
如果它很重要我正在使用KSoap2 2.5.2在1.6目标平台上编写它,并且它在我所有不同的Android模拟器中表现相同.
我用wireshark嗅探了数据包,模拟器似乎正在发送正确的东西,但它收到的结果总是为NULL.(我已经对使用这些Web服务的测试网站多次测试了这些确切的参数,并且所有这些都在那里完美运行.)
那么,有人可以在这里扔我一块骨头吗?
谢谢,
Magua
编辑2010.11.28:
即使Wireshark告诉我,我发送参数,似乎Web服务没有正确接收它们,或类似的东西.我创建了一个全新的服务,假设返回一个简单的字符串,无论第一个参数是什么,最后是"TEST",从Web服务本身硬编码.
好吧,每次我运行它(从Android)我都会得到一个结果,它总是"TEST".无论我如何制定SoapEnvelope或无论我作为参数传递什么,我总是收到"TEST".当然,当我在服务器上调用Web服务时,它就像一个冠军(我的结果是"这是一个测试").
我的Web服务位于带有IIS 7的Windows Server 2008上.应用程序池针对具有"集成"托管管道模式的框架v2.0(而不是v4.0)运行.
我不知道断开的地方在哪里.KSoap2是否发送参数不正确?IIS配置不正确吗?还有别的吗?
哇.将这一点归结为各种各样的怪异和疏忽,但我已经解决了这个问题.
问题是名称空间末尾缺少尾随'/'.不是为Android全局变量声明的名称空间,而是在Service.asmx.cs文件顶部附近的Web服务本身声明的名称空间.(直接在WebServiceBinding之上).
一旦我把它添加到最后,一切都像冠军一样运作.
奇怪的是,这显然会影响仅采用参数的方法,因为那些没有参数的方法工作得很好.只有使用KSoap2作为我的网站,使用完全相同的服务才能完美运行.
| 归档时间: |
|
| 查看次数: |
10789 次 |
| 最近记录: |