草庐IT

Android、KSoap2 和 .NET Web 服务 w/parameters = NULL 结果

coder 2023-12-01 原文

显然这是一个相当常见的问题。我不完全确定问题出在哪里,或者需要调整什么,但在我的一生中,我无法从带有参数的 .NET XML Web 服务中检索到我的 SoapObject 或 SoapPrimitive 的 NULL 结果以外的任何结果。

我已经尝试了我在网上找到的所有内容:

  • 添加 .setXmlVersionTag = 无变化
  • 使用 SoapObject 而不是 SoapPrimitive = 没有变化
  • 使用 SoapPrimitive 代替 SoapObject = 没有变化
  • 使用 HttpTransportSE 而不是 AndroidHttppTransport = 没有变化
  • 使用 AndroidHttpTransport 而不是 HttpTransportSE = 没有变化
  • 设置 .dotNet = true = 无变化
  • 删除 .dotNet 分配行 = 无变化
  • 从 Web 服务中删除冒号(整个 HTTP://前缀)= 无变化
  • 使用 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";

我知道“yoda”翻译正确,因为我的非参数化 Web 服务运行得非常出色。(除了“request.addProperty”调用外,一切都是相同的(部分或所有)手头的问题。)

如果重要的话,我是针对使用 KSoap2 2.5.2 的 1.6 目标平台编写的,它在我所有不同的 Android 模拟器中的行为都相同。

我用 wireshark 嗅探了数据包,模拟器似乎发送了正确的东西,但它收到的结果总是 NULL。 (我已经针对使用这些网络服务的测试网站多次测试了这些确切的参数,并且一切都在那里完美运行。)

那么,有人能给我扔骨头吗?

谢谢,

麻瓜

编辑 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 作为我的网站,使用完全相同的服务才能完美运行。

关于Android、KSoap2 和 .NET Web 服务 w/parameters = NULL 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4290089/

有关Android、KSoap2 和 .NET Web 服务 w/parameters = NULL 结果的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  6. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  7. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  8. "\0"null 的 Ruby 测试? - 2

    我在破坏脚本的字符串中出现了一些奇怪的字符。据我所知,通过putbadstring到控制台,它们是"\0\0\0\0"。我想对此进行测试,以便我可以忽略它们...但是如何呢?以为这就是blank?和empty?的用途?!?:>badstring="\0"=>"\u0000">badstring.blank?NoMethodError:undefinedmethod`blank?'for"\u0000":Stringfrom(irb):97from/Users/meltemi/.rvm/rubies/ruby-2.0.0-p195/bin/irb:16:in`'>badstring.em

  9. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  10. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

随机推荐