ksoap2: Parameterübergabe an ASP.NET Webservice

F

Funkfeuer

Neues Mitglied
1
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
 
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:
SoapFault - faultcode: 'soap:Server' faultstring:
'Die Anforderung konnte vom Server nicht verarbeitet werden.
---> Die Prozedur oder Funktion 'meine_stored_procedure' erwartet den '@param1'-Parameter, der nicht bereitgestellt wurde.'
faultactor: 'null' detail: org.kxml2.kdom.Node@44ea3430

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:
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.
 
hat leider auch nicht funktioniert.
Der Wert wird immer noch nicht erkannt - gleiche Fehlermeldung :crying:
 
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:
 
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...
 
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:

W/System.err(1472): java.lang.ClassCastException: org.ksoap2.serialization.SoapObject

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:
Kannst du mal den kompletten Stacktrace posten? So sieht man leider nicht so viel.
 
  • Danke
Reaktionen: Funkfeuer
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:
 
  • Danke
Reaktionen: deek

Ähnliche Themen

FabianDev
Antworten
5
Aufrufe
555
swa00
swa00
Jansenwilson
Antworten
1
Aufrufe
759
swa00
swa00
D
Antworten
17
Aufrufe
407
datNeMo
D
Zurück
Oben Unten