我想连接到Soap 1.2 Web服务,但据我所知,android不支持wshttpbindings。所以我尝试了ksoap2 lib,它应该能够发送正确的soap动作。
SoapObject request = new SoapObject(NAMESPACE, SOAP_METHOD);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.implicitTypes = true;
envelope.dotNet = true;
envelope.headerOut = SoapUtils.buildHeader(SSL_URL, SOAP_ACTION);
我甚至尝试编写标题,但我不确定wshttpbinding真正需要哪些标记。 有谁知道如何在android下使用wshttpbinding?我已经看过其他问题,但没有任何效果。请帮忙。
答案 0 :(得分:0)
最好尝试使用basicHttpBinding。 wsHttpBinding使用Android中不支持的一些高级消息安全性(取决于您的设置)。运输安全(ssl)将更容易。
答案 1 :(得分:0)
我已连接到wsdl服务。线索是服务需要一个返回SecurityContextToken的主请求。额外请求需要此令牌。第一个肥皂信封看起来像这样:
如果我将此soap信封发送到服务,它将返回可用于其他请求的SecurityToken。 但是我不确定哪些标签对于SecurityTokenRequest是必要的,因为在这个请求中有一些uid和标签值每次都会改变,我不知道它们是如何构建的。例如MessageId,UserToken id,BinarySecret Tag,......
有人知道哪些标签是重要的,哪些不是?
我使用了HttpsUrlConnection和OutputStream:
URL url = new URL(SSL_URL);
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setSSLSocketFactory(context.getSocketFactory());
urlConnection.setHostnameVerifier(hostnameVerifier);
urlConnection.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
urlConnection.connect();
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
if (out != null)
{
out.write(getReqData());
out.flush();
out.close();
}
int res = urlConnection.getResponseCode();
String message = urlConnection.getResponseMessage();
InputStream in = urlConnection.getInputStream();
String msg = convertStreamToString(in);