【问题标题】:Getting 'InternalServiceFault' exception when trying to invoke a svc webservice(hosted in IIS server)尝试调用 svc Web 服务时出现“InternalServiceFault”异常(托管在 IIS 服务器中)
【发布时间】:2015-05-12 06:16:42
【问题描述】:

在 Android 中尝试使用 ksoap2 调用 svc web 服务(托管在 IIS 服务器中)时出现“InternalServiceFault”异常。

异常发生:

W/System.err:SoapFault - 故障代码:'a:InternalServiceFault' faultstring: 'OperationFormatter 遇到无效的消息正文。 预计会找到名称为“GetUnits”的节点类型“Element”和 命名空间'http://tempuri.org/'。找到具有名称的节点类型“元素” 'GetUnits' 和命名空间 'http://tempuri.org/IRestaurant/'' faultactor:'null' 详细信息: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)

请求:

    <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>

调用代码:

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

服务调用

@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;
    }

【问题讨论】:

  • 看起来你的smth不匹配。你的_NAMESPACE 等于什么?
  • "tempuri.org/IRestaurant" 这是命名空间。我们将此作为第一个参数传递给服务调用函数。 new FetchData(LoginActivity.this).execute("tempuri.org/IRestaurant/","GetUnits","http:/…);
  • 改成tempuri.org试试看,有什么变化吗?
  • 是的,我将命名空间更改为“tempuri.org”并解决了“InternalServiceFault”异常。然后我得到了套接字超时异常,我通过在 HttpTransportSE 中给出超时间隔来解决它 androidHttpTransport = new HttpTransportSE(URL,60000);
  • 那是另一个exception,我只回答了你的要求

标签: android .net


【解决方案1】:

预计会找到名为“GetUnits”和命名空间“http://tempuri.org/”的节点类型“Element”。找到名为“GetUnits”和命名空间“http://tempuri.org/IRestaurant/”的节点类型“元素”

将您的 Namespace 更改为:

"tempuri.org/IRestaurant/";

到:

"tempuri.org/"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多