消费通过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%正确的。
看起来在NAMESPACE
和SOAP_ACTION
中存在一些问题。我已经经历了一些教程走了,他们说,SOAP_ACTION
通过连接NAMESPACE
与METHOD_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