2015-10-26 2 views
0

Я работаю над Android-приложением, которое необходимо сделать для вызова веб-службы в веб-службу ASP.Net. Я использую клиент KSOAP2, и это работает, но внезапно перестало работать.Ошибка при вызове .ASP.Net Веб-сервис с Android

Я изменил все последние изменения, которые я сделал без успеха.

Вот Android код

private final String NAMESPACE = "http://www.domain.com/"; 
     private final String URL = "https://www.domain.com/WebServices/LicenseActivationService.asmx"; 
     private final String SOAP_ACTION = "http://www.domain.com/"; 
     private String LOG_TAG = "ACTIVATION"; 
     private String methName = "ActivateLicense"; 
    String resultJSON = ""; 
       ActivationDTO activation = new ActivationDTO(); 
       activation.setLoginEmail(mEmail); 
       activation.setLoginPassword(mPassword); 
       activation.setDeviceId(getDeviceId(mcontext)); 


       //convert the activation object to a JSON String so it can be sent to the 
       //web service 
       Gson gson = new Gson(); 

       String jsonActivationRecord = gson.toJson(activation); 

       //make web service call 
       // Create request 
       SoapObject request = new SoapObject(NAMESPACE, methName); 
       // Property which holds input parameters 
       PropertyInfo paramPI = new PropertyInfo(); 
       // Set Name 
       paramPI.setName("serializedUserInfo"); 
       // Set Value 
       paramPI.setValue(jsonActivationRecord); 
       // Set dataType 
       paramPI.setType(String.class); 
       // Add the property to request object 
       request.addProperty(paramPI); 
       // Create envelope 
       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
         SoapEnvelope.VER11); 
       envelope.dotNet = true; 
       // Set output SOAP object 
       envelope.setOutputSoapObject(request); 
       // Create HTTP call object 
       HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

       try { 
        // Invoke web service 
        androidHttpTransport.call(SOAP_ACTION+methName, envelope); 
        // Get the response 
        SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 
        // Assign it to static result 
        resultJSON = response.toString(); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 




       // TODO: register the new account here. 
       return resultJSON; 
      } 

А вот часть ASP.Net Web Service

[WebService(Namespace = "http://www.domain.com/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
public class LicenseActivationService : System.Web.Services.WebService 
{ 


    [WebMethod] 
    public string ActivateLicense(string serializedUserInfo) 
    { 

     ActivationDto activationDTO = JsonConvert.DeserializeObject<ActivationDto>(serializedUserInfo); 
     String result; 


     if (activationDTO == null) 
     { 
      //return invalid input 
      activationDTO.IsActivated = false; 
      activationDTO.Result = "Input is empty"; 
      result = JsonConvert.SerializeObject(activationDTO); 
      return result; 
     } 

}

Что я мог отсутствовать или быть где я мог бы представил Жук. Последовательно сообщение об ошибке такое же

W/System.err: SoapFault - faultcode: 'soap:Server' faultstring: 'Server was unable to process request. ---> Object reference not set to an instance of an object.' faultactor: 'null' detail: [email protected] 
10-26 11:17:43.124 6809-7723/com.domain.app W/System.err:  at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:137) 

ответ

1

Это не должно составить, так как не все пути кода возвращают строку в вашем веб-службы.

Инициализировать переменную результата в веб-службе и вернуть результат вне вашего оператора if.

 [WebMethod] 
public string ActivateLicense(string serializedUserInfo) 
{ 

    ActivationDto activationDTO = JsonConvert.DeserializeObject<ActivationDto>(serializedUserInfo); 
    String result = ""; 


    if (activationDTO == null) 
    { 
     //return invalid input 
     activationDTO.IsActivated = false; 
     activationDTO.Result = "Input is empty"; 
     result = JsonConvert.SerializeObject(activationDTO); 

    } 
    return result; 

}

+0

Спасибо Роберт, это сенсационное. У меня есть несколько операторов if, которые необходимо оценить после этого первого оператора if. Позвольте мне посмотреть, как я могу их вложить, если еще –

+0

Спасибо, однако проблема сохраняется, я даже прокомментировал все в веб-службе и вернул обратно то, что было передано, и все равно получаю то же сообщение об ошибке –

+0

Установите режим отладки на true на вашем httptransportse и захватить дамп ответа на стороне Android. –

1

Его может помочь вам.

package databaseconnect.databaseconnect; 
import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText;  
import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 
public class MainActivity extends Activity { 

private static String SOAP_ACTION = "http://tempuri.org/Service/XXXXXX"; 
private static String NAMESPACE = "http://tempuri.org/"; 
private static String METHOD_NAME = "MethodName"; 
private static String URL = "http://Example.com/Service1.svc?wsdl"; 
Button Save,Clear; 
EditText name,mobile,email; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    name = (EditText) findViewById(R.id.editText); 
    mobile = (EditText) findViewById(R.id.editText2); 
    email = (EditText) findViewById(R.id.editText3); 
    Save=(Button)findViewById(R.id.button); 
    Clear=(Button)findViewById((R.id.clear)); 
    Save.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AsyncCallWS task = new AsyncCallWS(); 
      task.execute(); 
     } 
    }); 
    Clear.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      name.setText(""); 
      mobile.setText(""); 
      email.setText(""); 
     } 
    }); 

} 
private class AsyncCallWS extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected Void doInBackground(Void... params) 
    { 


     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     request.addProperty("name", name.getText().toString()); 
     request.addProperty("mobile", mobile.getText().toString()); 
     request.addProperty("email", email.getText().toString()); 
     //request.addProperty("name", "RamcoSystems"); 
     // request.addProperty("mobile", "044-0004972"); 
     //request.addProperty("email", "[email protected]"); 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.implicitTypes = true; 
     envelope.setAddAdornments(false); 
     envelope.setOutputSoapObject(request); 
     String res=null; 
     try 
     { 

      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,180000); 
      androidHttpTransport.debug=true; 
      androidHttpTransport.call(SOAP_ACTION, envelope); 

     } catch (Exception e) 
     { 
      name.setText(e.toString()); 
     } 

     return null; 
    } 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

}

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

  • Нет связанных вопросов^_^