2012-04-08 2 views
0

Я создал веб-сервис для проверки параметров передачи через ksoap2. Я думал, что это выглядит довольно простой процесс, но я, очевидно, пропустил что-то простое. Веб-служба не более чем возвращает целое число, которое передается ему. Когда я выполняю этот код возвращает число 0 вместо 1.Как использовать параметры с помощью 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; 

Примечание: Я проверил это с помощью .net веб-страницы и возвращает число 1, как ожидалось. Веб-сервис здесь не проблема.

вот н-ролл.

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

Благодарим за любую помощь.

+0

Вам удалось решить эту проблему. У меня та же проблема. – Tjaart

ответ

0

Отказ от ответственности: всякий раз, когда я пытаюсь поговорить с .NET webservice, используя kSoap2, я обычно делаю много fiddling. И я имею в виду это буквально: я настраиваю машину для Windows с Fiddler2 и использую ее как прокси-сервер как для запроса на отказ, так и для рабочего запроса ссылки, поэтому я могу на самом деле посмотреть, что происходит не так.. Я настоятельно рекомендую сделать что-то подобное, как только вы попытаетесь сделать что-то нетривиальное.

Тем не менее, в вашем случае, это может быть достаточно, чтобы сделать

envelope.dotNet = true; 
+0

Благодарим вас за быстрый ответ. К сожалению, это не имело никакого значения. Я скачу Fiddler2 и посмотрю, как это может мне помочь. – alockrem

+0

Fiddler показывает много взаимодействий, но не показывает никаких ссылок на веб-сервисы, которые я звоню из эмулятора Android. Даже работа в андроиде, которая работает, не появляется на скрипаче. – alockrem

+0

Мне все еще нужна помощь. Хотя я ценю текущую помощь, это предложение не привело к каким-либо результатам. – alockrem

0

Попробуйте удалить WSDL в конце

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

Кроме того попробуйте использовать это, чтобы получить ответ:

Object response = envelope.getResponse(); 

вместо SoapObject result = (SoapObject)envelope.bodyIn;

EDITED

Это работает:

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(); 
    } 
} 
} 

Надеется, что это помогает.

+0

Благодарим за предложение. Я попробовал это, но все равно получаю тот же результат (0 вместо 1). Это общедоступный веб-сервис. Если кто-то может заставить его произвести 1, я был бы очень благодарен за понимание того, как это делается. – alockrem

+0

@alockrem проверить мой отредактированный ответ. –

Смежные вопросы