无法连接到WCF服务在Android连接到、WCF、Android

2023-09-04 03:17:48 作者:失梦少年

我试图连接到一个.NET WCF服务在Android中使用kSOAP2(V 2.1.2),但我不断收到一个致命异常,每当我试图使服务调用。我有一点困难跟踪误差,并似乎无法弄清楚,为什么它的发生。在code我现在用的就是如下:

 包org.example.android;

进口org.ksoap2.SoapEnvelope;
进口org.ksoap2.serialization.PropertyInfo;
进口org.ksoap2.serialization.SoapObject;
进口org.ksoap2.serialization.SoapSerializationEnvelope;
进口org.ksoap2.transport.HttpTransport;

进口android.app.Activity;
进口android.app.AlertDialog;
进口android.content.DialogInterface;
进口android.content.Intent;
进口android.os.Bundle;

公共类的ValidateUser延伸活动{
    私有静态最后弦乐SOAP_ACTION =htt​​p://tempuri.org/mobile/ValidateUser;
    私有静态最后弦乐METHOD_NAME =的ValidateUser;
    私有静态最后弦乐NAMESPACE =htt​​p://tempuri.org/mobile/;
    私有静态最后字符串的URL =htt​​p://192.168.1.2:8002/WebService.Mobile.svc;

     / **第一次创建活动时调用。 * /
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.validate_user);

        意向意图= getIntent();

        捆绑额外= intent.getExtras();

        如果(临时演员== NULL){
        this.finish();
        }
        字符串username = extras.getString(用户名);
        字符串password = extras.getString(密码);

        布尔VALIDUSER = FALSE;


        尝试 {
        SoapObject请求=新SoapObject(命名空间METHOD_NAME);
            的PropertyInfo的uname =新的PropertyInfo();
            uName.name =username的;

            的PropertyInfo PWORD =新的PropertyInfo();
            pWord.name =密码;

            request.addProperty(UNAME,用户名);
            request.addProperty(PWORD,密码);

            SoapSerializationEnvelope包=新SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = TRUE;
            envelope.setOutputSoapObject(要求);

            HttpTransport androidHttpTransport =新HttpTransport(URL);
            androidHttpTransport.call(SOAP_ACTION,包); //错误发生在这里

        整数用户id =(整数)envelope.getResponse();
        VALIDUSER =(!用户id = 0);
        }赶上(例外前){

        }
    }

    私人无效退出(){
        this.finish();
    }
}
 

编辑:删除旧的堆栈跟踪。总之,第一个问题是该程序是无法打开的连接,由于缺少方法或库因使用香草kSOAP2而不是Android的修改后的库(kSOAP2-安卓)。第二个问题是一个设置问题。在清单中我并没有添加以下设置:

 <使用-权限的Andr​​oid:名称=android.permission.INTERNET对/>
 

我现在有一个问题,我需要找出XMLPullParser。

  

10月12日至23日:58:06.480:   错误/ SOCKETLOG(210):add_recv_stats   的recv 0

     

10月12日至23日:58:06.710:   WARN / System.err的(210):   org.xmlpull.v1.XmlPullParserException:   意外的类型(位置:END_DOCUMENT   空@ 1:0   java.io.InputStreamReader@433fb070)

     

10月12日至23日:58:06.710:   WARN / System.err的(210):在   org.kxml2.io.KXmlParser.exception(KXmlParser.java:243)

     

10月12日至23日:58:06.720:   WARN / System.err的(210):在   org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:1363)

     

10月12日至23日:58:06.720:   WARN / System.err的(210):在   org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126)

     

10月12日至23日:58:06.720:   WARN / System.err的(210):在   org.ksoap2.transport.Transport.parseResponse(Transport.java:63)

     

10月12日至23日:58:06.720:   WARN / System.err的(210):在   org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:100)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   org.example.android.ValidateUser.onCreate(ValidateUser.java:68)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2104)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2157)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   android.app.ActivityThread.access $ 1800(ActivityThread.java:112)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1581)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   android.os.Handler.dispatchMessage(Handler.java:88)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   android.os.Looper.loop(Looper.java:123)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   android.app.ActivityThread.main(ActivityThread.java:3739)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   java.lang.reflect.Method.invokeNative(母语   方法)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   java.lang.reflect.Method.invoke(Method.java:515)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:739)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:497)

     

10月12日至23日:58:06.730:   WARN / System.err的(210):在   dalvik.system.NativeStart.main(母语   方法)

解决方案

得到这个工作。有上述与清单文件的一些问题。最重要的是命名空间,SOAP_ACTION和URL参数是不正确的。将需要的名称空间URI:是pre-挂起它,就像SOAP_ACTION。需要有一个端点的URL指定的这样反而 http://192.168.1.2:8002/WebService的。 Mobile.svc 的,它需要是 http://192.168.1.2:8002/ WebService.Mobile.svc /移动。连接问题解决了,只是现在需要弄清楚数据传输的事情。

win10如何设置默认播放器为暴风影音

I am trying to connect to a .NET WCF service in Android using kSOAP2 (v 2.1.2), but I keep getting a fatal exception whenever I try to make the service call. I'm having a bit of difficulty tracking down the error and can't seem to figure out why it's happening. The code I am using is below:

package org.example.android;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransport;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;

public class ValidateUser extends Activity {
    private static final String SOAP_ACTION = "http://tempuri.org/mobile/ValidateUser";
    private static final String METHOD_NAME = "ValidateUser";
    private static final String NAMESPACE = "http://tempuri.org/mobile/";    
    private static final String URL = "http://192.168.1.2:8002/WebService.Mobile.svc"; 

     /** Called when the activity is first created. */	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.validate_user);

        Intent intent = getIntent();

        Bundle extras = intent.getExtras();

        if (extras == null) {
        	this.finish();
        }
        String username = extras.getString("username");
        String password = extras.getString("password");    	                          

        Boolean validUser = false;


        try {
        	SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            PropertyInfo uName = new PropertyInfo();
            uName.name = "userName";

            PropertyInfo pWord = new PropertyInfo();
            pWord.name = "passWord";

            request.addProperty(uName, username);
            request.addProperty(pWord, password);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);

            HttpTransport androidHttpTransport = new HttpTransport(URL);
            androidHttpTransport.call(SOAP_ACTION, envelope); // error occurs here

        	Integer userId = (Integer)envelope.getResponse();
        	validUser = (userId != 0);
        } catch (Exception ex) {

        }        	  	
    }

    private void exit () {
        this.finish();
    }
}

EDIT: Remove the old stack traces. In summary, the first problem was the program being unable to open a connection due to missing methods or libraries due to using vanilla kSOAP2 rather than a modified library for Android (kSOAP2-Android). The second issue was a settings issue. In the Manifest I did not add the following setting:

<uses-permission android:name="android.permission.INTERNET" />

I am now having an issue with the XMLPullParser which I need to figure out.

12-23 10:58:06.480: ERROR/SOCKETLOG(210): add_recv_stats recv 0

12-23 10:58:06.710: WARN/System.err(210): org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@433fb070)

12-23 10:58:06.710: WARN/System.err(210): at org.kxml2.io.KXmlParser.exception(KXmlParser.java:243)

12-23 10:58:06.720: WARN/System.err(210): at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:1363)

12-23 10:58:06.720: WARN/System.err(210): at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126)

12-23 10:58:06.720: WARN/System.err(210): at org.ksoap2.transport.Transport.parseResponse(Transport.java:63)

12-23 10:58:06.720: WARN/System.err(210): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:100)

12-23 10:58:06.730: WARN/System.err(210): at org.example.android.ValidateUser.onCreate(ValidateUser.java:68)

12-23 10:58:06.730: WARN/System.err(210): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122)

12-23 10:58:06.730: WARN/System.err(210): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2104)

12-23 10:58:06.730: WARN/System.err(210): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2157)

12-23 10:58:06.730: WARN/System.err(210): at android.app.ActivityThread.access$1800(ActivityThread.java:112)

12-23 10:58:06.730: WARN/System.err(210): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1581)

12-23 10:58:06.730: WARN/System.err(210): at android.os.Handler.dispatchMessage(Handler.java:88)

12-23 10:58:06.730: WARN/System.err(210): at android.os.Looper.loop(Looper.java:123)

12-23 10:58:06.730: WARN/System.err(210): at android.app.ActivityThread.main(ActivityThread.java:3739)

12-23 10:58:06.730: WARN/System.err(210): at java.lang.reflect.Method.invokeNative(Native Method)

12-23 10:58:06.730: WARN/System.err(210): at java.lang.reflect.Method.invoke(Method.java:515)

12-23 10:58:06.730: WARN/System.err(210): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)

12-23 10:58:06.730: WARN/System.err(210): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:497)

12-23 10:58:06.730: WARN/System.err(210): at dalvik.system.NativeStart.main(Native Method)

解决方案

Got this working. There were some issues as mentioned above with the Manifest file. On top of that the NAMESPACE, SOAP_ACTION, and URL parameters were incorrect. The NAMESPACE required "uri:" to be pre-pended to it, as did SOAP_ACTION. The URL needed to have an endpoint specified so instead of http://192.168.1.2:8002/WebService.Mobile.svc it needed to be http://192.168.1.2:8002/WebService.Mobile.svc/Mobile. Connection issues resolved, just need to figure out the data transport thing now.