【发布时间】:2013-12-02 09:30:54
【问题描述】:
我正在尝试从 android 客户端访问 nav 2009 网络服务。
我尝试了ksoap2 库和jcifs 库。 ksoap2 给illegalargumentexception transport.call 和jcifs 给authentication error。
还有其他方法可以访问导航网络服务吗?
JCIFS:
protected Void doInBackground(String... arg0) {
// TODO Auto-generated method stub
String webserviceIP = "-------------"; // IP of the server.
String username = "---------"; // Domain username
String password ="--------"; // Domain password
String deviceIP="" ;
String domainName = "-----"; // Domain name
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getAuthSchemes().register("ntlm", new NTLMSchemeFactory());
httpclient.getCredentialsProvider().setCredentials(new AuthScope(webserviceIP, -1), new NTCredentials(username, password, deviceIP, domainName));
HttpGet httpGet = new HttpGet(URL);
httpGet.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
HttpResponse response = null;
try {
response = httpclient.execute(httpGet);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
String responseXML = EntityUtils.toString(response.getEntity());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
ksoap2:
SoapObject request=new SoapObject(NAMESPACE,METHOD_NAME);
request.addProperty("No", arg0[0]);
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
HttpTransportSE transport = new HttpTransportSE(URL);
try {
transport.call(SOAP_ACTION, envelope);
} catch (HttpResponseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//SoapObject result = (SoapObject) envelope.getResponse();
【问题讨论】:
-
我不喜欢安卓。检查是否在 Web 服务设置
<add key="WebServicesUseNTLMAuthentication" value="true"></add>/ 中设置了正确的身份验证方法这可能是authentication error的问题。 -
至于
illegal argument,它可能意味着损坏的 XML(尝试从 XML 中擦除缩进,如果它存在的话)或缺少 SOAPAction 标头(我认为它对于 Nav WS 是强制性的)。 -
对于非法参数异常@Mak,transport.call 方法将 size
-
谢谢@MakSim。我检查了配置文件中的身份验证元素是假的。将其更改为真。Web 服务现在通过 jcifs 连接,但在 ksoap2 中出现相同的错误。我应该将身份验证添加到那个transport.call。
-
它是否返回 HTTP 500 错误?这意味着您的 SOAP 请求不正确。在大多数情况下,Nav 会更新告诉您出了什么问题。尝试获取
envelope变量中的内容,并尝试使用 SOAPui 等其他工具将其发送到 WS(只有夜间构建的 SOAPui 可以很好地与 Nav 配合使用)或将其发布在此处。
标签: android web-services navision