我想问以下问题.我们有一个Android和iOS移动应用程序,用于与.NET服务器交换数据.
对于Android,使用ksoap2库,而对于iOS,使用带有AEXML库的Alamofire.
我们希望为服务器和应用程序之间的通信启用加密,特别是具有相互证书的Message Security(https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/message-security - 相互证明)
我无法找到任何有关Android或iOS客户端如何加密/解密请求/响应的信息.
能否请您提供相关信息?
提前致谢!
我的.NET Web服务返回一个XML.当我在Android中使用ksoap2调用Web服务时,我遇到了这个问题.请帮忙.
我在Eclipse中的Logcat
12-19 15:58:11.951: W/dalvikvm(2041): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-19 15:58:11.961: E/AndroidRuntime(2041): FATAL EXCEPTION: main
12-19 15:58:11.961: E/AndroidRuntime(2041): java.lang.RuntimeException: double ID
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:407)
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273)
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389)
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273)
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389)
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273)
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389)
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:151)
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:140)
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.transport.Transport.parseResponse(Transport.java:116)
12-19 15:58:11.961: E/AndroidRuntime(2041): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:259) …
Run Code Online (Sandbox Code Playgroud) 我从ksoap调用.NET WCF Web服务我的WebMethod采用一个复杂的参数UpdatableCustomerInfo
public class UpdatableCustomerInfo implements KvmSerializable {
public String CustomerId;
public String Facebook;
@Override
public Object getProperty(int arg0) {
String retVal = "";
switch(arg0)
{
case 0:
retVal = CustomerId;
break;
case 1:
retVal = Facebook;
break;
}
return retVal;
}
@Override
public int getPropertyCount() {
return 2;
}
@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
switch(arg0)
{
case 0:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "CustomerId";
break;
case 1:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "Facebook"; …
Run Code Online (Sandbox Code Playgroud) 我有Web服务,它返回XML数据.但在数据中,我在它的开头接收到Null字段.实际数据也可用,但后面跟着Null字段.我正在使用ksoap2访问Android中的web服务.SoapObject变量具有完整数据,但也具有那些空字段,这对于使用此服务有点创建问题.在这里你可以看到,在开始它没有什么,但后来它有数据以标签"标题"开头
04-12 10:55:09.405: D/ENVELOPE(1394): GetGuestEventsListingForServiceResponse{GetGuestEventsListingForServiceResult=anyType{schema=anyType{element=anyType{complexType=anyType{choice=anyType{element=anyType{complexType=anyType{sequence=anyType{element=anyType{}; element=anyType{}; element=anyType{}; element=anyType{}; element=anyType{}; element=anyType{}; element=anyType{}; element=anyType{}; element=anyType{}; element=anyType{}; }; }; }; }; }; }; }; diffgram=anyType{NewDataSet=anyType{Table=anyType{Title=THE CLUSTER DAY-1, JUNKOVATION; Description=anyType{}; EventDate=Apr 12, 2013; EventTime=5:00 PM; Venue=BLOCK 13-306; CreatedBy=16689; CreatedOn=2013-04-11T09:52:07.163+05:30; EventFor=All; Type=Internal; IsActive=true; };
Run Code Online (Sandbox Code Playgroud) 我正在使用ksoap2-android通过SSL调用wcf服务.我可以在没有SSL的情况下使用它,但现在我想通过SSL进行调用,但我遇到了一些问题.
我正在使用HttpsTransportSE而不是HttpTransportSE,但我收到错误:javax.net.ssl.SSLException:不受信任的服务器证书
我怎样才能解决这个问题?
我可以将服务器证书添加到Android中的Keystore来解决问题吗?
private static final String SOAP_ACTION = "http://example.com/Service/GetInformation";
private static final String METHOD_NAME = "GetInformation";
private static final String NAMESPACE = "http://example.com";
private static final String URL = "dev.example.com/Service.svc";
public static Result GetInformation()
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo property = new PropertyInfo();
property.name = "request";
Request request =
new Request("12", "13", "Ben");
userInformationProperty.setValue(request);
userInformationProperty.setType(request.getClass());
request.addProperty(property);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
envelope.addMapping(NAMESPACE, "Request",new Request().getClass());
HttpsTransportSE transport = new HttpsTransportSE(URL, 443, "", …
Run Code Online (Sandbox Code Playgroud) 我正在使用ksoap2-android,我需要使用java获取IP地址,这样我就不必每次都手动输入.
我的意思是IP地址,例如,如果我使用命令shell 执行ipconfig:
特定于连接的DNS后缀.:
链接本地IPv6地址.....:f0 :: ed2:e3bf:8206:44%13
IPv4地址...........:192.168.1.107 < - 这个
子网掩码...........:255.255.255.0
默认网关.........:192.168.1.1
事情是开发一个Android应用程序,模拟器有一个不同类型的IP比机器的.
我需要获得机器的IP,这是怎么做到的?
非常感谢
我正在使用ksoap2在Android中创建用户注册应用程序.
当我向服务器发送请求并且在10秒内没有响应时,我想用"再试一次"消息提示用户.如果服务器在10秒内响应,我希望程序在没有消息的情况下继续.
我怎样才能做到这一点?在KSoap2中是否有TimerTask或任何Timeout方法?
到目前为止,我已经创建了一个PHP客户端和一个VB.NET客户端,它们都成功调用了我的PHP Web服务.为了让后者工作,我需要使用SourceForge中的SoapUI工具.它告诉我,我的wsdl不符合WS-I.我不需要Pro版本以交互方式测试我的服务,因为它允许您直接编辑soap请求.修复我的WSDL并让我的VB.Net客户端运行android仍然是一个问题.
我还附上了ksoap2-andriod的源代码,以便我可以在调试时逐步完成.它有一点帮助,但是没有包含源的捆绑依赖项,特别是"kxml2 v1.6".如果有人能指出我的源拉链或罐子,我会很感激.
这是我从Android客户端调用PHP Web服务时无法解决的错误.
org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <definitions name='naturallyIrrationalsoapserver' targetNamespace='http://www.naturallyIrrational.com'>@10:42 in java.io.InputStreamReader@44dce560)
Run Code Online (Sandbox Code Playgroud)
它告诉我它无法解析WSDL\XML - poistion @ 10.42是开放定义标记的结尾.
我相信,作为现在符合WS-I的WSDL,问题是由Ksoap2解释的这个服务命名空间定义.这是我用来调用它的android客户端代码.
public class SoapClientActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.myText);
String soapResponse="";
final String METHOD_NAME = "getArrval";
final String SOAP_ACTION = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.wsdl";
final String NAMESPACE = "http://www.naturallyIrrational.com";
Run Code Online (Sandbox Code Playgroud)
*下一行不正确,应指向 http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.php*
final String URL = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.wsdl";
if (InternetStatus.getInstance(this).isOnline(this)) {
try{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); …
Run Code Online (Sandbox Code Playgroud) 我打电话在我的Android应用程序的网络服务和方法是getGramaNiladhariData(),我得到的结果作为SoapObject.
result = (SoapObject) envelope.bodyIn; Log.d("WS", String.valueOf(result));
Run Code Online (Sandbox Code Playgroud)
这就是我得到的 String.valueOf(结果)
这里我调用的方法返回一个complexType对象,由5个属性组成.正如我在互联网上发现的那样,我无法获得soap对象作为返回complexType对象的webservice方法的结果.如果是这样,我应该如何获取值.
我想要解决的是为什么我得到anyType {},作为值,而不是实际值.任何帮助,将不胜感激
我正在尝试使用kSoap2和EasyWSDL将我的Android应用程序连接到受TLS保护的SOAP端点,但我收到以下异常:
W/System.err: javax.net.ssl.SSLHandshakeException: Connection closed by peer
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:351)
at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:192)
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)
W/System.err: at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(Unknown Source:0)
at org.ksoap2.transport.HttpsServiceConnectionSE.openOutputStream(HttpsServiceConnectionSE.java:127)
at com.easywsdl.exksoap2.mtom.MTOMTransportImplementation.sendData(MTOMTransportImplementation.java:65)
at com.easywsdl.exksoap2.transport.AdvancedHttpsTransportSE.sendData(AdvancedHttpsTransportSE.java:39)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:184)
at com.easywsdl.exksoap2.transport.AdvancedHttpsTransportSE.call(AdvancedHttpsTransportSE.java:51)
Run Code Online (Sandbox Code Playgroud)
以下是我配置传输的方式:
@Override
protected Transport createTransport() {
Transport transport = super.createTransport();
try {
if(transport instanceof HttpsTransportSE) {
HttpsTransportSE httpsTransport = (HttpsTransportSE)transport;
if(httpsTransport.getServiceConnection() instanceof HttpsServiceConnectionSE) {
HttpsServiceConnectionSE httpsServiceConnection = (HttpsServiceConnectionSE)httpsTransport.getServiceConnection();
httpsServiceConnection.setSSLSocketFactory(getSSLSocketFactory()); …
Run Code Online (Sandbox Code Playgroud) android ×10
android-ksoap2 ×10
soap ×4
java ×2
ksoap2 ×2
wcf ×2
web-services ×2
asp.net ×1
https ×1
ios ×1
ip ×1
ip-address ×1
php ×1
ssl ×1
tls1.2 ×1
wcf-security ×1