Java ksoap2 AsyncTask属性信息未接收到webservice,为什么?
我需要向我的web服务发送一些参数并获得结果。我在lib中使用了ksoap2-android-assembly-2.4-jar-with-dependencies.jar,我的web服务工作正常:Java ksoap2 AsyncTask属性信息未接收到webservice,为什么?,java,web-services,android-asynctask,ksoap,propertyinfo,Java,Web Services,Android Asynctask,Ksoap,Propertyinfo,我需要向我的web服务发送一些参数并获得结果。我在lib中使用了ksoap2-android-assembly-2.4-jar-with-dependencies.jar,我的web服务工作正常: [WebMethod] public string TestParams(string userName, string password, string startRowIndex, string maximumRows, string OrderType, string I
[WebMethod]
public string TestParams(string userName, string password, string startRowIndex, string maximumRows, string OrderType, string IdOpera)
{
return userName + " - " + password + " - " + startRowIndex + " - " + maximumRows + " - " + OrderType + " - " + IdOpera;
}
在主java代码中:
private class AsyncCall extends AsyncTask<String, Void, SoapObject > {
@Override
protected SoapObject doInBackground(String... params) {
if (Constants.DEBUG)Log.i(Constants.LOGTAG, "doInBackground");
AsynGetSellList list = new AsynGetSellList();
AsynGetSellList.setMAIN_REQUEST_URL(MAIN_REQUEST_URL);
AsynGetSellList.setMETHOD_NAME(METHOD_NAME);
AsynGetSellList.setNAMESPACE(NAMESPACE);
AsynGetSellList.setSOAP_ACTION(SOAP_ACTION);
javab = list.GetSellList(1);
return javab;
}
@Override
protected void onPreExecute() {
if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onPreExecute");
pDialog = new ProgressDialog(SellList.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected void onProgressUpdate(Void... values) {
if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onProgressUpdate");
}
@Override
protected void onPostExecute(SoapObject javab) {
if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onPostExecute");
pDialog.dismiss();
if (isCancelled()) {
finish();
}
if (javab!=null){
fillSells(javab);
}
}
}
需要的其他代码部分:
public PropertyInfo addParam(String name, Object value) {
PropertyInfo propertyInfo = new PropertyInfo();
propertyInfo.name = name;
propertyInfo.type = value == null ? PropertyInfo.OBJECT_CLASS : value.getClass();
propertyInfo.setValue(value);
return propertyInfo;
}
private final static SoapSerializationEnvelope getSoapSerializationEnvelope(SoapObject request) {
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.implicitTypes = true;
envelope.setAddAdornments(false);
envelope.setOutputSoapObject(request);
return envelope;
}
在logcat中检查send params时看到的内容:
TestParams{userName=01395175; password=password; ...}
但是问题是:result0=--
这意味着(对我来说)web服务没有收到参数。
我试过很多方法,但你们有足够的经验知道问题出在哪里吗?首先让我告诉你,检查网页并改变了许多方式,因此,如果你看到或面临相同的问题,请告诉我……谢谢。问题解决了,但如何解决?这是由于tempori.org,在我的web服务中用作默认值。我把它改成了我的网址,它就解决了。这真的是一个愚蠢的错误,因为在很多情况下,web服务会正确地回复,就在您收到数据集时,您会遇到一个未知的错误。无论如何,经过一天的全日制尝试和错误解决了。
blogs.msdn.com/b/endpoint/archive/2011/05/12/how-to-eliminate-tempuri-org-from-your-service-wsdl.aspx
如何从WCF服务WSDL中删除tempuri.org
步骤1:在服务契约上声明名称空间
名称空间可以是任何内容。人们通常使用某种形式的URI,但它不必指向实际的网页。通常,人们会在namsepace中使用版本标识符,但是没有关于应该做什么的规则
//从合同中删除tempuri.org
//如果你不想给我们一个常量,把URI放在这里
//[ServiceContract(名称空间=”)]
[ServiceContract(名称空间=常量.名称空间)]
公共接口IService1
{
}
步骤2:在服务上声明名称空间
服务命名空间添加了ServiceBehavior属性。使用常量可以确保契约和服务的命名空间相同
//如果你不想给我们一个常量,把URI放在这里
//[ServiceBehavior(名称空间=”)]
[ServiceBehavior(名称空间=常量.名称空间)]
公共类服务1:IService1
{
}
步骤3:设置绑定命名空间
<services>
<service name="EliminateTempUri.Service1">
<!-- Use a bindingNamespace to eliminate tempuri.org -->
<endpoint address=""
binding ="basicHttpBinding"
bindingNamespace="http://contoso.com/services"
contract="EliminateTempUri.IService1"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
我几周前就遇到了这个问题。您的参数用户名、密码、startRowIndex等是否与Web服务中的参数名称完全相同(包括大写字母)?这就是我的问题,当我的Web服务需要参数“username”时,我将username传递给参数“username”。
[OperationContract]
void DoWork();
public void DoWork()
{
}
<services>
<service name="EliminateTempUri.Service1">
<!-- Use a bindingNamespace to eliminate tempuri.org -->
<endpoint address=""
binding ="basicHttpBinding"
bindingNamespace="http://contoso.com/services"
contract="EliminateTempUri.IService1"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />