1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

ksoap2: Parameterübergabe an ASP.NET Webservice

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Funkfeuer, 11.06.2012.

  1. Funkfeuer, 11.06.2012 #1
    Funkfeuer

    Funkfeuer Threadstarter Neuer Benutzer

    Beiträge:
    24
    Erhaltene Danke:
    1
    Registriert seit:
    19.09.2011
    Hallo,

    ich greife mit ksoap2 auf den ASP.NET-Webservice von TempConvert Web Service (SOAP 1.1) zu.
    Das funktioniert problemlos.

    Wenn ich dann aber auf meinen ASP.NET-Webservice zugreife, bekomme ich vom Server eine Fehlermeldung.
    Darin wird angegeben, dass der 1. Parameter, den ich übergeben habe, den Wert null enthält.

    Ich habe auf der Android-Seite (außer der Webservice-URL, Namespace,..) am Code nix verändert.
    Habe halt meine Parameter (Schlüssel/Wert) drangehängt und auch auf SOAP 1.1 zugegriffen.
    Auch den Parameter isDotNet habe ich auf True gestellt.

    Ich vermute, dass ich am ich am IIS oder am Server selbst noch etwas einstellen muss - vielleicht ist nur GET freigeschalten und POST nicht?
    Spielt das eine Rolle?
    Habt Ihr eine Idee oder ein ähnliches Problem, das Ihr gelöst habt?

    cu
    Chris
     
  2. Funkfeuer, 11.06.2012 #2
    Funkfeuer

    Funkfeuer Threadstarter Neuer Benutzer

    Beiträge:
    24
    Erhaltene Danke:
    1
    Registriert seit:
    19.09.2011
    Vielleicht hilft der Code weiter:

    Code:
    public class MyTestActivity extends Activity {
        
        private static final String SOAP_ACTION = "http://www.meinserver.de/MeineMethode";
        private static final String METHOD_NAME = "MeineMethode";
        private static final String NAMESPACE = "http://www.meinserver.de/";
        private static final String URL = "http://meinserver/meinProjekt/service.asmx";
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
            Request.addProperty("p_param1", "11");
            Request.addProperty("p_param2", "abc");
            Request.addProperty("p_param3", "");
            Request.addProperty("p_param4", 40103);
            Request.addProperty("p_param5", 5);
            Request.addProperty("p_param6", "");
            Request.addProperty("p_param7", "");
            Request.addProperty("p_param8", "");
            Request.addProperty("p_param9", "");
            
            SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            soapEnvelope.dotNet = true;
            soapEnvelope.setOutputSoapObject(Request);
            
            AndroidHttpTransport aht = new AndroidHttpTransport(URL);  
            try {
                aht.call(SOAP_ACTION, soapEnvelope);
                SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
                System.out.println(">>> " + resultString);
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    Und das ist die genaue Fehlermeldung:
    Und das ist der Webservice. Kann es sein, dass Soap fehlt?
    Code:
    using System; 
    using System.Web; 
    using System.Web.Services; 
    using System.Web.Services.Protocols; 
    using System.Data; 
    using System.Data.SqlClient; 
     
    [WebService(Namespace = "http://www.meinserver.de")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    public class Service : System.Web.Services.WebService 
    { 
     
        [WebMethod] 
        public Result MeineMethode(string p_param1, string p_param2, string p_param3, int p_param4, int p_param5, string p_param6, string p_param7, string p_param8, string p_param9) 
        { 
        //....
        } 
     
    } 
    
     
    Zuletzt bearbeitet: 11.06.2012
  3. deek, 12.06.2012 #3
    deek

    deek Fortgeschrittenes Mitglied

    Beiträge:
    442
    Erhaltene Danke:
    110
    Registriert seit:
    09.03.2011
    Hi,

    probier es mal mit
    Code:
    Request.addProperty("arg0", "11");
    Request.addProperty("arg1", "abc");
    
    usw statt die Parameter mit Namen anzusprechen. Das hatte damals bei mir nur so funktioniert.
     
  4. Funkfeuer, 12.06.2012 #4
    Funkfeuer

    Funkfeuer Threadstarter Neuer Benutzer

    Beiträge:
    24
    Erhaltene Danke:
    1
    Registriert seit:
    19.09.2011
    hat leider auch nicht funktioniert.
    Der Wert wird immer noch nicht erkannt - gleiche Fehlermeldung :crying:
     
  5. deek, 13.06.2012 #5
    deek

    deek Fortgeschrittenes Mitglied

    Beiträge:
    442
    Erhaltene Danke:
    110
    Registriert seit:
    09.03.2011
  6. Funkfeuer, 14.06.2012 #6
    Funkfeuer

    Funkfeuer Threadstarter Neuer Benutzer

    Beiträge:
    24
    Erhaltene Danke:
    1
    Registriert seit:
    19.09.2011
    Erstmal vielen Dank für Deine Mühe!!

    Werde das mit dem PropertyInfo heute Abend ausprobieren.
    Bin schon froh, dass es anderen auch so geht - dann ist zumindest der Webservice soweit in Ordnung.. ausser das http bzw. www. Diese beiden Sachen werde ich im WebService entfernen. :rolleyes2:
     
  7. deek, 14.06.2012 #7
    deek

    deek Fortgeschrittenes Mitglied

    Beiträge:
    442
    Erhaltene Danke:
    110
    Registriert seit:
    09.03.2011
    Was du auch noch probieren könntest ist aus "Spaß" einen kleinen WebService mit Java zu bauen und es mal mit dem auszuprobieren. Um Konfigurationsfehler im IIS auszuschließen.
    Muss ja nur eine Methode haben mit 2-3 Parametern die die Parameter ausgibt...
     
  8. Funkfeuer, 14.06.2012 #8
    Funkfeuer

    Funkfeuer Threadstarter Neuer Benutzer

    Beiträge:
    24
    Erhaltene Danke:
    1
    Registriert seit:
    19.09.2011
    Jetzt bin ich ein großes Stück weitergekommen!!

    Ich habe irrtümlicherweise im NAMESPACE am Ende einen Slash "/" gehabt....

    Jetzt habe ich noch ein Problem mit Integer-Werten.

    Ich bekomme den folgenden Fehler:

    Das passiert beim Rückgabeparameter:
    Code:
    SoapPrimitive result = (SoapPrimitive)soapEnvelope.getResponse();
    
    Anscheinend wird ein String erwartet. Tatsächlich kommt aber ein Integer zurück..
     
    Zuletzt bearbeitet: 14.06.2012
  9. deek, 14.06.2012 #9
    deek

    deek Fortgeschrittenes Mitglied

    Beiträge:
    442
    Erhaltene Danke:
    110
    Registriert seit:
    09.03.2011
    Kannst du mal den kompletten Stacktrace posten? So sieht man leider nicht so viel.
     
    Funkfeuer bedankt sich.
  10. Funkfeuer, 15.06.2012 #10
    Funkfeuer

    Funkfeuer Threadstarter Neuer Benutzer

    Beiträge:
    24
    Erhaltene Danke:
    1
    Registriert seit:
    19.09.2011
    Habe den Fehler schon gefunden.
    Ich habe im Webservice nicht einen Integer zurückgegeben, sondern habe davor noch ein XML-Element gehabt.
    Das konnte dann natürlich nicht in einen int gecastet werden..

    Manchmal fällt man halt über seine eigenen Füße.. aber jetzt funktioniert alles.
    Vielen Dank für Unterstützung! :thumbsup:
     
    deek bedankt sich.

Diese Seite empfehlen