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
19.9k17 gold badges100 silver badges187 bronze badges
asked May 12, 2015 at 6:16
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
- 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: nullDoes 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
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"); //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’)