gpt4 book ai didi

php - 如何使用 ksoap2-android 正确调用我的 PHP 网络服务?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:55:47 26 4
gpt4 key购买 nike

到目前为止,我已经创建了一个 PHP 客户端和一个 VB.NET 客户端,它们都成功调用了我的 PHP 网络服务。为了让后者工作,我需要使用来自 SourceForge 的 SoapUI 工具.它告诉我我的 wsdl 不符合 WS-I。我不需要专业版来交互式测试我的服务,因为它允许您直接编辑 soap 请求。在修复我的 WSDL 并让我的 VB.Net 客户端运行 android 之后仍然是一个问题。

我也是attached the source code for ksoap2-andriod这样我就可以在调试时逐步完成。它有一点帮助,但有一些 bundle 的依赖项不包括源代码,特别是“kxml2 v1.6”。如果有人能指出我的源代码 zip 或 Jar,我将不胜感激。

这是我从我的 android 客户端调用 PHP 网络服务时无法解决的错误。

  org.xmlpull.v1.XmlPullParserException: expected: START_TAG   {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <definitions name='naturallyIrrationalsoapserver' targetNamespace='http://www.naturallyIrrational.com'>@10:42 in java.io.InputStreamReader@44dce560)

它告诉我它无法解析 WSDL\XML - @10.42 的位置是开始定义标记的结尾。

我相信,作为现在 WS-I 中的 WSDL,问题出在由 Ksoap2 解释的服务 namespace 定义中。这是我用来调用它的 android 客户端代码。

public class SoapClientActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.myText);
String soapResponse="";
final String METHOD_NAME = "getArrval";
final String SOAP_ACTION = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.wsdl";
final String NAMESPACE = "http://www.naturallyIrrational.com";

* 下一行不正确,应该指向 http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.php *

        final String URL = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.wsdl";

if (InternetStatus.getInstance(this).isOnline(this)) {

try{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);


PropertyInfo pi = new PropertyInfo();
pi.setName("valname");
pi.setValue("rt2");
pi.setType(String.class);
request.addProperty(pi);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=false;
envelope.setOutputSoapObject(request);
HttpTransportSE andHttpTransport = new HttpTransportSE(URL);
andHttpTransport.debug = true;
andHttpTransport.call(SOAP_ACTION, envelope);

* 返回这个值有问题,它已经收到但从 ksoap 传回时抛出错误 *

 soapResponse = (String) envelope.getResponse();  //Exception is thrown here  
String strrequest = andHttpTransport.requestDump;
String strresponse = andHttpTransport.responseDump;

}catch(Exception e){soapResponse = "Nope not working "+"\n\n" + e.getMessage() + "/n/n" + e.getStackTrace() ;}
} else {soapResponse="You are not online"; }


tv.setText(soapResponse);
}
}

如果我在做一些愚蠢的事情并且有人可以指出它,我将不胜感激。

是否有指令不像在 PHP 中那样在 Android 中缓存和重用 wsdl?

也许使用 net beans 会有所帮助,下次我有空的时候再说。如果有人可以在此期间提供帮助,请不要犹豫提出建议。

<?php
class naturallyIrrational {
private $arrval = array("pi" => 3.1415,"e" => 2.7183, "rt2" => 1.414, "phi" => 1.618 );
function getIrrationalvalue($valname) {
$myFile = "logFile.html";
$fh = fopen($myFile, 'a') or die("can't open file");
$datq = date('m/d/Y h:i:s a', time());
fwrite($fh, $datq);
if (isset($this->arrval[$valname])) {

$stringData = " ".$valname." = ".$this->arrval[$valname]."<br/>";
fwrite($fh, $stringData);
fclose($fh);
return $this->arrval[$valname];
} else {
throw new SoapFault("Server","Unknown Symbol '$valname'.");
}
}
}
$server = new SoapServer("naturallyIrrational.wsdl");
$server->setClass("naturallyIrrational");
$server->handle();

最佳答案

我最近开发了一个 Restful 网络服务。将 Web 服务开发为 SOAP 以外的 restful 服务的原因有很多。我在 SOAP 上做了一个非常小的项目,只是为了了解全局,然后转向开发 restful,因为它更有优势。为了开发这两种模型,Netbeans IDE 提供了非常方便的工具。读 Web Services Learning Trail

该链接以非常简单的方式包含了 restful 和 SOAP/WDSL web 服务开发...希望这会有所帮助。

关于php - 如何使用 ksoap2-android 正确调用我的 PHP 网络服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11963078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com