question

UlasKAYALAR avatar image
0 Votes"
UlasKAYALAR asked UlasKAYALAR answered

How to solve the error? "Server did not recognize the value of HTTP Header SOAPAction"

I can use web service like Get Post. I can use it on localhost without any problems. However, when I try to use it through an android application, I encounter this error.

What kind of setting do I need to make on the web service side? Because I did a lot of things to do on the java and android side, but the error did not go away.


Error message : SoapFault - faultcode: 'soap:Client' faultstring: 'System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: https://api.example.com/LoginAPI.


My Java Code;

 public class YLogin extends AppCompatActivity {
     EditText yoneticieposta, yoneticiparola;
     Button yoneticiDGiris;
     String Eposta, Parola, ReturnResult;
    
     /*Web Service*/
     public static String URL="https://api.example.com/MCG-WS.asmx?WSDL";
     public static String NAMESPACE="https://api.example.com";
    
     /*Login API*/
     public static String SOAP_ACTION_LOGIN="https://api.example.com/LoginAPI";
     public static String METHOD_NAME_LOGIN="LoginAPI";
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.ylogin);
 
         TrustManager[] trustAllCerts = new TrustManager[]{
                 new X509TrustManager() {
                     public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                         return null;
                     }
                     public void checkClientTrusted(
                             java.security.cert.X509Certificate[] certs, String authType) {
                     }
                     public void checkServerTrusted(
                             java.security.cert.X509Certificate[] certs, String authType) {
                     }
                 }
         };
    
   
         try {
             SSLContext sc = SSLContext.getInstance("SSL");
             sc.init(null, trustAllCerts, new java.security.SecureRandom());
             HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
         } catch (Exception e) {
         }
    
 
         try {
             java.net.URL url = new URL("https://api.example.com/MCG-WS.asmx");
         } catch (MalformedURLException e) {
         }
    
         yoneticieposta = (EditText) findViewById(R.id.yoneticiepostaTx);
         yoneticiparola = (EditText) findViewById(R.id.yoneticiparolaTx);
         yoneticiDGiris = (Button) findViewById(R.id.yoneticiDGirisYapBt);
         yoneticiDGiris.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 Eposta = yoneticieposta.getText().toString();
                 Parola = yoneticiparola.getText().toString();
    
                 if(Eposta.isEmpty() || Parola.isEmpty()){
                     Toast.makeText(YLogin.this, "E-posta veya parola kısımlarını doldurun.", Toast.LENGTH_SHORT).show();
                 }else{
                     new LoginAsyncTask().execute(Eposta, Parola);
                 }
             }
         });
     }
    
     private class LoginAsyncTask extends AsyncTask<String, Void, String> {
         @Override
         protected void onPreExecute() {
             super.onPreExecute();
         }
    
         @Override
         protected String doInBackground(String... strings){
    
             SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_LOGIN);
    
             PropertyInfo infoEposta = new PropertyInfo();
             infoEposta.setName("eposta");
             infoEposta.setType(String.class);
             infoEposta.setValue(strings[0].toString());
             request.addProperty(infoEposta);
    
             PropertyInfo infoParola = new PropertyInfo();
             infoParola.setName("parola");
             infoParola.setType(String.class);
             infoParola.setValue(strings[1].toString());
             request.addProperty(infoParola);
    
             SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    
             envelope.dotNet =true;
             envelope.setOutputSoapObject(request);
    
             HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    
             try {
                 androidHttpTransport.call(SOAP_ACTION_LOGIN, envelope);
    
                 SoapFault error = (SoapFault)envelope.bodyIn;
                 System.out.println("TTTTTTTTTTTTTT Error message : "+error.toString());
    
                 SoapObject result = (SoapObject)envelope.bodyIn;
    
                 if(result!=null){
                     ReturnResult = result.getProperty(0).toString();
                 }
    
             }
             catch(Exception e){
                 e.printStackTrace();
                 return e.toString();
             }
    
             return ReturnResult;
         }
    
         @Override
         protected void onPostExecute(String result) {
    
             if(result.equals("başarılı")){
                 Intent intent = new Intent(YLogin.this, dashboard.class);
                 intent.putExtra("yoneticiEposta", Eposta);
                 startActivity(intent);
             }else{
                 Toast.makeText(YLogin.this, "E-posta veya parolanız yanlış, tekrar deneyin.", Toast.LENGTH_SHORT).show();
             }
         }
     }
 }


windows-wcf
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

1 Answer

UlasKAYALAR avatar image
0 Votes"
UlasKAYALAR answered

I updated these parts of the code. Problem solved.


  /*Web Service*/
         public static String URL="https://api.example.com/MCG-WS.asmx?WSDL";
         public static String NAMESPACE="http://tempuri.org";
        
        
         /*Login API*/
         public static String SOAP_ACTION_LOGIN="http://tempuri.org/LoginAPI";
         public static String METHOD_NAME_LOGIN="LoginAPI";
    
    
 if (envelope.bodyIn instanceof SoapFault) {
                     SoapFault error = (SoapFault) envelope.bodyIn;
                     System.out.println("TTTTTTTTTTTTTT Error message : " + error.toString());
                 }
                 if (envelope.bodyIn instanceof SoapObject) {
                     SoapObject result = (SoapObject) envelope.bodyIn;
                     if(result!=null){
                         ReturnResult = result.getProperty(0).toString();
                     }
                 }



5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.