Код ошибки internalservicefault

Getting ‘InternalServiceFault’ exception when trying to invoke a svc webservice(hosted in IIS server) using ksoap2 in Android.

Exception happening :

W/System.err﹕ SoapFault — faultcode: ‘a:InternalServiceFault’
faultstring: ‘OperationFormatter encountered an invalid Message body.
Expected to find node type ‘Element’ with name ‘GetUnits’ and
namespace ‘http://tempuri.org/’. Found node type ‘Element’ with name
‘GetUnits’ and namespace ‘http://tempuri.org/IRestaurant/»
faultactor: ‘null’ detail: org.kxml2.kdom.Node@40c821a8 05-11
22:26:30.068 913-921/com.org.ansal.placemaorder W/System.err﹕ at
org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:137)

Request :

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:itemId>1</tem:itemId>
   </soapenv:Body>
</soapenv:Envelope>

Invocation code:

  new FetchData(LoginActivity.this).execute("http://tempuri.org/IRestaurant/","GetUnits","http://10.0.0.2/RestaurantServices/RegistrationServices.svc");

Service call

@Override
protected String doInBackground(String... params) {
    String result="";
    String _NAMESPACE   = params[0];
    String _METHOD_NAME = params[1];
    String URL     = params[2];
    String _SOAP_ACTION = _NAMESPACE + _METHOD_NAME;
    SoapObject request = new SoapObject(_NAMESPACE, _METHOD_NAME);
    request.addProperty("itemId",1);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;

    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    try {
        androidHttpTransport.debug = true;
        androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding= \"UTF-8\"?>");
        androidHttpTransport.call(_SOAP_ACTION, envelope);
        SoapObject   resultsRequestSOAP = (SoapObject) envelope.getResponse();
        result  = resultsRequestSOAP.toString();
        System.out.println("****** RESULT: " + resultsRequestSOAP.toString());
    } catch (Exception e) {
        System.out.println("******* THERE WAS AN ERROR ACCESSING THE WEB SERVICE");
        e.printStackTrace();
    }

    return result;
    }

halfer's user avatar

halfer

19.9k17 gold badges100 silver badges187 bronze badges

asked May 12, 2015 at 6:16

dreamdeveloper's user avatar

dreamdeveloperdreamdeveloper

1,2761 gold badge15 silver badges20 bronze badges

5

Expected to find node type ‘Element’ with name ‘GetUnits’ and namespace ‘http://tempuri.org/’. Found node type ‘Element’ with name ‘GetUnits’ and namespace ‘http://tempuri.org/IRestaurant/»

Change your Namespace from:

"tempuri.org/IRestaurant/";

to:

"tempuri.org/"

answered May 13, 2015 at 5:45

hrskrs's user avatar

  • Remove From My Forums
  • Question

  • I have a really simple WCF application that has been working for several days without any problems. Today I run the same application without any changes (at least none that I am aware of) and I get the following error from the SoapException object:

    {«The device is not ready.\r\n»}
        base {System.SystemException}: {«The device is not ready.\r\n»}
        actor: null
        Actor: «»
        Code: {http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher:InternalServiceFault}
        code: {http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher:InternalServiceFault}
        Detail: {Element, Name=»detail»}
        detail: {Element, Name=»detail»}
        lang: «en-GB»
        Lang: «en-GB»
        Node: «»
        role: null
        Role: «»
        subCode: null
        SubCode: null

    Does anyone have any pointers as to what might be the cause?
    I have re-installed .NET Framework 3.0 and did Windows Update etc. but this has not resolved the issue. The WCF service does not do any file access, it simply extracts values from a Sql Server 2005 database.
    Many thanks.

Answers

Я сделал простой проект для вызова веб-службы wcf с помощью ksoap2. Но когда он вызывает envelope.getResponse(); он дает ошибку, говоря

Ошибка:
SoapFault — faultcode: «a: InternalServiceFault» faultstring: «Сервер не смог обработать запрос из-за внутренней ошибки. Для получения дополнительной информации об ошибке включите IncludeExceptionDetailInFaults (либо из ServiceBehaviorAttribute, либо из поведения конфигурации) на сервере, чтобы отправить информацию об исключении обратно клиенту или включить трассировку в соответствии с документацией Microsoft.NET Framework 3.0 SDK и проверять журналы трассировки сервера. ‘ faultactor: ‘null’ detail: null

package testing.wcf;
import java.io.IOException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import android.os.Bundle;
import android.os.StrictMode;
import android.widget.TextView;
import android.annotation.SuppressLint;
import android.app.Activity;

public class MainActivity extends Activity 
{
    private static final String strNAMESPACE = "http://www.testing.co.in/TestingService/";
    private static final String strURL = "http://www.testing.co.in/TestingService/UserDetails.svc";
    private static final String strSOAP_ACTION = "http://testing.co.in/TestingService/UserDetails/LoginDetails";
    private static final String strMETHOD_NAME = "LoginDetails";
    TextView tv;
    StringBuilder sb;
    String strInputXML;

      @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView)findViewById(R.id.testing);
        sb = new StringBuilder();       
            Call();
        tv.setText(sb.toString());
        //setContentView(tv);

    }
    public void Call()
    {
         try 
         {
             SoapObject request = new SoapObject(strNAMESPACE, strMETHOD_NAME);

            String inputxml = "<?xml version="+"\""+"1.0"+"\""+" encoding="+"\""+"utf-8"+"\""+" ?>" +"<MOB> \n  <PIN>0000</PIN> \n  <LOGINID>TEST</LOGINID> \n  <PNUMBER>112233</pNUMBER> \n  <REQUESTID>LoginVal</REQUESTID> \n </MOB>";

            request.addAttribute("strInputXML", inputxml);
            request.addAttribute("strOutputXML","");

                   SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
             envelope.dotNet = true;
             envelope.setOutputSoapObject(request);

             HttpTransportSE androidHttpTransport = new HttpTransportSE(strURL);
             androidHttpTransport.call(strSOAP_ACTION, envelope);
             SoapPrimitive result = (SoapPrimitive)envelope.getResponse();

             String resultData = result.toString();
             sb.append(resultData + "\n");
         }
         catch(Exception e)
         {
             sb.append("Error:\n" + e.getMessage() + "\n");
         }       
    }
}

Здесь я хочу отправить запрос следующим образом

<?xml version="1.0" encoding="utf-8" ?> 
<PhoneData>
<PINNO>0000</PINNO>
<LOGINID>HELLO</LOGINID>
<PASSWORD>1234</PASSWORD>
<REQID>0</REQID>
</PhoneData>

Мой ответ XML должен быть

<?xml version="1.0" encoding="utf-8" ?> 
<PhoneData>
<OTA>1234</OTA>
</PhoneData>

Поделиться

Источник

3 ответа

Я публикую свой рабочий код для использования WCF (привязка WCF должна быть basicHttpBinding!):

private static final String NAMESPACE = "http://tempuri.org/";
private static String URL="your url";

private static final String SOAP_ACTION_VALIDATION = "IValidateUser_wcf/ValidateUser";
private static final String VALIDATION_METHOD = "ValidateUser";

public boolean validateUser_WCF(String username, String password){

    SoapSerializationEnvelope envelope = null;
    SoapObject request = null;
    HttpTransportSE httpTransportSE = null;

    try {
        request = new SoapObject(NAMESPACE, VALIDATION_METHOD);
        request.addProperty("username", username);
        request.addProperty("password", password);

        envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true; 
        envelope.setOutputSoapObject(request);

            //////////////////////////////                               
            // here you can add a HEADER element if you want
        Element[] header = new Element[1];  

        header[0] = new Element().createElement(NAMESPACE_INFOCAD, "a1");                
        header[0].addChild(Node.TEXT, "HeaderTextContent");

        envelope.headerOut = header;
            //////////////////////////////                               

        httpTransportSE = new HttpTransportSE(URL+VALIDATION_URI, 10*10000); // second parameter is timeout
        httpTransportSE.debug = true;
        httpTransportSE.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        httpTransportSE.call(NAMESPACE+SOAP_ACTION_VALIDATION, envelope);

            // if response is a simple text result, you can call SoapPrimitive, if not, you have to call SoapObject result and navigate in response tree like an xml file
        SoapPrimitive result = (SoapPrimitive)envelope.getResponse();

        //To get the data.
        String textResult = result.toString();
        Log.i("textResult", textResult); 

                    return true;

    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }finally{
                 // here you can see in LOG what is request you send and what is response received
                Log.i(getClass().getSimpleName(),"requestDump : "+httpTransportSE.requestDump);
                Log.i(getClass().getSimpleName(),"responseDump : "+httpTransportSE.responseDump);
    }

    return false;
}

Надеюсь, мой код поможет вам:). Он работает на 100%

kinghomer

Поделиться

Думаю, вам стоит взглянуть на нечто, называемое FaultContract. Если исключение выбрасывается из службы, сообщение об ошибке никогда не будет достигнуто на стороне клиента. Итак, вот где приходит FaultContract. Скажите, например, что вызов службы приведет к возникновению исключения в службе, как клиент должен знать уловленную ошибку?

Вот пример того, как вы могли бы реализовать FaulContract:

//An interface for your service
[ServiceContract()]
    public interface IMultiply
    {
        [OperationContract()]
        int Multiply(int number1, int number2);
    }

Метод в вашем «сервис-классе» должен implement this interface

//Service implementation

public  class DoSomeMath: IMultiply
{
   public int Multiply(int number1, int number2)
   {
     try 
     {
        int k = number1 * number2;
     } 
     catch (Exception e)
     {
       MyFaultException theFault = new MyFaultException();
       theFault.Reason = "Some Error " + e.Message.ToString();
       throw new FaultException<MyFaultException>(theFault);
     }      
     return k;     
   }
}

На стороне клиента вы можете теперь исключить исключение. Для дальнейшего чтения я рекомендую вам прочитать:

Обработка исключений в WCF с использованием договора о неисправности

Я надеюсь, что это укажет вам в правильном направлении.

Tobias Moe Thorstensen

Поделиться

Для эмулятора Android используйте этот ip: 10.0.2.2, иначе это не сработает!!
private final String SOAP_URL = «http://10.0.2.2:15398/Service1.svc»;

qasim azam

Поделиться

Ещё вопросы

  • 0Таблица обновлений php массива bind_param после цикла
  • 0GCC — определить мою собственную опцию командной строки, которая добавляет список опций
  • 1Python — Копирование данных из одного файла в другой файл
  • 1Слушатели TextInputLayout не работают
  • 0Javascript, как мне создать массив дат?
  • 0Как сохранить значение, установленное в JavaScript после обратной передачи
  • 0Подождите, пока звук не закончится, чтобы использовать страницу
  • 1странная ошибка в java отражении (обработка)
  • 0Java — Spring Boot — Mysql / Java — Получить тип транспортного средства из столбца таблицы и получить их общее количество (КОЛИЧЕСТВО) из другой таблицы
  • 0JQuery position.top () медленный с большим количеством элементов
  • 1Удалить средние элементы из массива
  • 1Java RandomAccessFile.java под Linux не работает правильно
  • 0Относительно предварительного объявления класса C ++
  • 0Структура индекса для вторичного поиска по ключевым словам
  • 0prettyCheckable останавливает проверку jquery от работы в флажках
  • 0N Queen с использованием C ++ и возврат с помощью динамического 2D-массива
  • 1Как сделать навигацию по ящику и нижней навигации с помощью одного приложения?
  • 0php mysql Обновление списка опций таблицы
  • 0Symfony2.3 PDOH и слишком много сессий создано по запросу
  • 0AngularJS: почему поиск не работает должным образом?
  • 0Codeigniter — как вернуть номер массива в контроллер
  • 1C # AppDomain загрузка (byte []) создает исключение FileLoadException (HResult 0x80131040 или ошибка манифеста)
  • 1Разработка службы публикации и подписки (Callbacks vs Interface)
  • 0Группировать записи по двум столбцам
  • 0jQuery load () застревает / зависает
  • 1Цветная сгруппированная гистограмма на основе сравнения чисел d3
  • 0как заменить косую черту «/» в строке MySQL
  • 1Чтение из списка массивов и сравнение с входной строкой
  • 1KnockoutJS — показать накопленную стоимость для каждого элемента
  • 1Когда перезапускается viewpager, он продолжает выполнять предыдущий фрагмент
  • 0Chrome: проблема с позиционированием в поле пароля
  • 1Почему .cfg не может быть переписан, но вместо этого создан новый файл?
  • 1Добавить сетку в список
  • 1Исключение NoClassDefFoundError
  • 0Входные параметры как HEX из командной строки
  • 1OSMnx Получить координаты Lat Lon чистых узлов пересечения
  • 1Как автоматически нажать кнопку ОК на JOptionPane при тестировании?
  • 1Как перебрать детей Firebase и добавить их ключи в список?
  • 0ошибка компиляции в src / libdyld / MachOObject.cpp; составление дорогая
  • 0Как применить Emojis к списку директив Angularjs?
  • 0Как обновить количество, выполнив несколько запросов?
  • 1Массив для сортировки рекордов
  • 0Предупреждающее сообщение Недопустимый тип смещения от функции Где Mysql php
  • 0Оптимизировать объединение, сумму, подзапросы
  • 1Преобразование даты в Java-приложении
  • 0CSS флюидная верстка для входных данных
  • 0Dojo документация альтернатива
  • 0Невозможно изменить цвет шрифта всех элементов в строках и столбцах табличных тегов
  • 1Преобразование байтового массива в изображение «Параметр недействителен».
  • 0Создайте «форму расчета» в javascript

Сообщество Overcoder

here is my code

client = Savon.client(wsdl: 'http://moghim24.ir:8080/Moghim24Scripts/Moghim24Services.svc?wsdl',ssl_verify_mode: :none, logger: Rails.logger , raise_errors: false ,encoding: "UTF-8", log: true)
    response = client.call(:open_tempfllist , :message => {fd: '96/01/01'.to_s, ld:  '97/01/01'.to_s, cust:  '1005'.to_s, pass:  '233344'.to_s})
    render :json => response.body

I get following error:

{
fault: {
faultcode: "a:InternalServiceFault",
faultstring: "Object reference not set to an instance of an object.",
detail: {
exception_detail: {
help_link: null,
inner_exception: null,
message: "Object reference not set to an instance of an object.",
stack_trace: " at encoding.Encode64(String s) at Moghim24Services.Moghim24Services.checkpincode(String cust, String userpass) at Moghim24Services.Moghim24Services.openTempfllist(String fd, String ld, String cust, String pass) at SyncInvokeopenTempfllist(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)",
type: "System.NullReferenceException",
@xmlns: "http://schemas.datacontract.org/2004/07/System.ServiceModel",
@xmlns:i: "http://www.w3.org/2001/XMLSchema-instance"
}
}
}
}

please help me to resolve the error.

public static HashMap<String, Object> callSOAPServer(StringBuffer soap /* YOUR XML GOES HERE*/,String action) {
    int count,size;
    int total=0;

    HashMap<String, Object> xMap = new HashMap<String, Object>();
    byte[] result = null;
    byte[] data = new byte[1024*1024];
    HttpClient httpclient = new DefaultHttpClient(); /* Your probably need to edit client for your needs, like timeout, scheme, etc */
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    DataInputStream is = null;
    boolean download = true;
   // HttpPost httppost = new HttpPost(/* YOUR URL GOES HERE */ );
    HttpPost httppost = new HttpPost("http://192.168.0.120:86/UserService.svc/basic");
    //httppost.setHeader("soapaction", action);
    httppost.setHeader("Content-Type", "text/xml; charset=utf-8");
    try {
        HttpEntity entity = new StringEntity(soap.toString(), HTTP.UTF_8);
        httppost.setEntity(entity);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity r_entity = response.getEntity();
        if (r_entity != null) {
            result = new byte[(int) r_entity.getContentLength()];
            size = result.length;
            if (r_entity.isStreaming()) {
                is = new DataInputStream(r_entity.getContent());
                while((count = is.read(data, 0, data.length)) != -1) {
                    buffer.write(data, 0, count);
                    total +=count;
                }
            }
            buffer.flush();
            result = buffer.toByteArray();
            data = null;
            buffer = null;
        }
    } catch (Exception e) {
        e.printStackTrace();
        result = null;
    }
    if(result !=null){
        try {
            String sb;
            String sn;
            sb = new String(result, "UTF-8");
            sn = sb.replace("&amp;", "AMP"); //Precaution for SAX parser
            result = sn.getBytes();
            Log.d("",result.toString());
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        xMap.put("STATUS", "OK");
        xMap.put("SOAP", result);
    }else{
        if(xMap.get("STATUS") == null) {
            xMap.put("STATUS", "ERROR");
        }
    }
    httpclient.getConnectionManager().shutdown();
    return xMap;
    // List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    //nameValuePairs.add(new BasicNameValuePair("Username", "Hari"));
    //nameValuePairs.add(new BasicNameValuePair("Password", "Hh123456"));
    // nameValuePairs.add(new BasicNameValuePair("soap.toString()", HTTP.UTF_8));
    //httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
}

Soap web service through the error(SoapFault — faultcode:
‘a:InternalServiceFault’)

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Код ошибки h20 стиральная машина аристон хотпоинт
  • Код ошибки internal power error
  • Код ошибки forza horizon 4 0x803f8001
  • Код ошибки gw502
  • Код ошибки guitar destiny 2

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии