2012-04-08 7 views
0

Ich habe einen Web-Service erstellt, um Parameter über ksoap2 zu testen. Ich dachte, es wäre ein ziemlich einfacher Prozess, aber ich vermisse anscheinend etwas Einfaches. Der Webdienst führt nur die zurückgegebene Ganzzahl zurück. Wenn ich den Code ausführen darunter die Zahl 0 statt 1.Wie verwende ich Parameter mit ksoap2?

private static String SOAP_ACTION = "http://tempuri.org/TestParams"; 
private static String NAMESPACE = "http://tempuri.org/"; 
private static String METHOD_NAME = "TestParams"; 
private static String URL = "http://services.lockrem.com/WebService.asmx?WSDL"; 

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

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
    request.addProperty("RoundId", 1); 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.setOutputSoapObject(request); 

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
    try { 
     androidHttpTransport.call(SOAP_ACTION, envelope); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    SoapObject result = (SoapObject)envelope.bodyIn; 

Hinweis zurück: Ich habe dies eine .net Web-Seite mit getestet und es gibt die Nummer 1 wie erwartet. Der Web-Service ist hier nicht das Problem.

Hier ist der Webservice.

[WebMethod] 
public int TestParams(int RoundId) 
{ 
    return RoundId; 
} 

Vielen Dank für jede Hilfe.

+0

Haben Sie das geschafft? Ich habe das gleiche Problem. – Tjaart

Antwort

0

Haftungsausschluss: Jedes Mal, wenn ich versuche, ein .NET-Webservice zu sprechen kSoap2 mit, ich in der Regel eine Menge Hantieren am Ende tut. Und ich meine das wörtlich: Ich habe einen Windows-Rechner mit Fiddler2 eingerichtet und benutze diesen als Proxy sowohl für die fehlgeschlagene Anfrage als auch für eine funktionierende Referenzanforderung, damit ich tatsächlich sehen kann, was schief geht. Ich rate dringend, etwas Ähnliches zu tun, sobald Sie versuchen, etwas nicht triviales zu tun.

das gesagt ist, in Ihrem Fall, könnte es genug zu tun

envelope.dotNet = true; 
+0

Vielen Dank für die schnelle Antwort. Leider machte das keinen Unterschied. Ich werde Fiddler2 herunterladen und sehen, wie das mir helfen kann. – alockrem

+0

Fiddler zeigt viele Interaktionen, zeigt aber keinen Hinweis auf die Web Services, die ich vom Android Emulator aus anrufe. Sogar die Android-Aktivität, die funktioniert, wird nicht auf Fiddler angezeigt. – alockrem

+0

Ich brauche noch etwas Hilfe. Obwohl ich die aktuelle Hilfe zu schätzen weiß, hat dieser Vorschlag zu keinem Fortschritt geführt. – alockrem

0

Versuchen Sie, die WSDL am Ende entfernen

private static String URL = "http://services.lockrem.com/WebService.asmx"; 

Zusätzlich versuchen dies mit der Antwort zu erhalten:

statt SoapObject result = (SoapObject)envelope.bodyIn;

EDITED

Dies funktioniert:

public class MainActivity extends Activity { 

private static String NAMESPACE = "http://tempuri.org/"; 
private static String METHOD_NAME = "TestParams"; 
private static String URL = "http://services.lockrem.com/WebService.asmx"; 
private TextView tv; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv = (TextView)findViewById(R.id.tv); 
    HttpTransportSE transport = new HttpTransportSE(URL); 
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
    request.addProperty("RoundId", 1); 
    SoapSerializationEnvelope envelope = 
     new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request); 
    try { 
     transport.call(NAMESPACE + METHOD_NAME, envelope); 
     Object response = envelope.getResponse(); 
     tv.setText(response.toString()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

Hoffe, es hilft.

+0

Vielen Dank für den Vorschlag. Ich habe das versucht, aber immer noch das gleiche Ergebnis (0 statt 1). Dies ist ein öffentlicher Webservice. Wenn irgendjemand es schaffen kann, eine 1 zu produzieren, würde ich es sehr schätzen zu wissen, wie es gemacht wird. – alockrem

+0

@alockrem Überprüfen Sie meine bearbeitete Antwort. –

Verwandte Themen