消费通过KSOAP2 Android上的WCF服务给错误

问题描述:

我有以下WCF webservice消费通过KSOAP2 Android上的WCF服务给错误

我想使用它在android系统client.My代码到目前为止是

public class SOAP_TestActivity extends Activity { 

    private final String NAMESPACE = "http://tempuri.org/"; 
    private final String URL = "http://50.19.226.15/Office365Admin/MsOnline.svc"; 
    private final String SOAP_ACTION = "http://tempuri.org/IMsOnline/ValidateUser"; 
    private final String METHOD_NAME = "ValidateUser"; 


    private final String user_id= "[email protected]"; 
    private final String password= "[email protected]"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
     { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button signin = (Button) findViewById(R.id.regsubmitbtn); 
     signin.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 

         boolean auth=doLogin(); 
         System.out.println(auth); 
         Toast.makeText(getApplicationContext(), String.valueOf(auth), Toast.LENGTH_SHORT).show(); 

       } 
      }); 
    } 

    private boolean doLogin() { 

    boolean result=false; 

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    request.addProperty("userid", user_id); 
    request.addProperty("password",password); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

    envelope.dotNet = true;   

    envelope.setOutputSoapObject(request); 

    Log.d("myApp", request.toString()); 
    System.out.println(request); 

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
    androidHttpTransport.debug = true; 

    try { 
      androidHttpTransport.call(SOAP_ACTION, envelope); 

      SoapPrimitive soapPrimitiveResults = (SoapPrimitive)envelope.getResponse();       

      Log.d("myApp", soapPrimitiveResults.toString()); 
      System.out.println("myApp" +soapPrimitiveResults); 

        if(soapPrimitiveResults.toString().equalsIgnoreCase("true")) 
     { 
        result = true; 

     } 

    }catch(SocketException ex) 
    { 
     Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage()); 
     ex.printStackTrace(); 
    } 
    catch (Exception e) { 
     Log.e("Error : " , "Error on soapPrimitiveData() " + e.getMessage()); 
      e.printStackTrace(); 
    } 
    return result; 

    } 
    } 

此代码的工作没有任何异常,但我我无法登录到我的应用程序,因为方法ValidateUser总是返回false.This相同的Web服务已在Windows Phone中使用,并且没有任何问题。而且用户名和密码是100%正确的。

看起来在NAMESPACESOAP_ACTION中存在一些问题。我已经经历了一些教程走了,他们说,SOAP_ACTION通过连接NAMESPACEMETHOD_NAME。所以,如果我按照教程我SOAP_ACTION应该

"http://tempuri.org/ValidateUser"

制作,但在WSDL link的方法"ValidateUser"给出的SOAP_ACTION

"http://tempuri.org/IMsOnline/ValidateUser"

我是新来的WCF Webservices和SOAP.Can任何人请告诉我如何实现WSDL Document(link is at the top)中给出的方法。 看起来像缺少重要的东西,但不知道是什么。

试试这个:

... 

Object response = envelope.getResponse(); 
String value = response.toString(); 

... 

如果同一个web服务工作正常的Windows Phone,那么你有一个命名空间的问题, 和Web服务方法没有得到来自SOAP消息的参数。而且由于你的ValidateUser没有获取参数,它只是返回null/false。

我有同样的问题。我解决它通过显式定义命名空间,因此摆脱了默认的命名空间WCF套,tempuri.org

这里是我的参考解决方案:

passing objects to wcf soap service from android using ksoap2; it sends and receives 0