【问题标题】:Connecting Java/Android to .NET webservice [closed]将 Java/Android 连接到 .NET 网络服务 [关闭]
【发布时间】:2013-08-17 18:28:28
【问题描述】:

我刚刚使用 HelloWorld 方法构建了一个 .net 默认 web 服务!

现在我正在尝试连接 Java/Android 简单实现以连接 .net 网络服务。我被困在 HttpTransportSE 电话上。它不起作用,实际上它停在这里。没有错误。

这里是代码示例:

private class SoapAccessTask extends AsyncTask<String, Void, String> {

  protected String doInBackground(String... urls){
     final String METHOD_NAME = "HelloWorld";
     final String NAMESPACE = "http://tempuri.org";
     final String SOAP_ACTION = "http://tempuri.org/HelloWorld;
     final String URL = "http://localhost:2986/Service1.asmx;

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
     SoapSerializationEnvelop envelop = new SoapSerializationEnvelop(SoapEnvelop.VER11);
     AndroidHttpTransport androidHttp = new AndroidHttpTransport(URL);
     androidHttp.call(SOAP_ACTION, envelop);
  }
}

知道为什么这不起作用吗?

问候

【问题讨论】:

  • 我不明白你的问题
  • 执行卡在 androidHttp.call(SOAP_ACTION, envelop) 的调用上。我试图在此调用之后打印一些东西,但它从未被调用过。
  • 尝试捕获并获取错误。
  • 我应该将 tempuri.org 更改为 localhost 吗?
  • 如果可能的话尝试托管它,并查看我下面的答案,首先尝试在没有 asynctask 的情况下进行操作,另请参见下面的代码;;如果您没有使用 android-ksoap2,请尝试使用该 android-ksoap2 和我的代码进行连接

标签: c# java android .net web-services


【解决方案1】:

在您的代码中加入以下行:

envelope.dotNet = true;
envelope.setOutputSoapObject(request);

编辑:

  1. 对于来自 kSOAP2 的 .NET Web 服务调用,dotNet 标志必须为真(当您使用 .NET Web 服务时)。因此envelope.dotNet = true;

  2. 最后,SoapObject 实例“request”被分配为信封的soap 调用的出站消息。因此envelope.setOutputSoapObject(request);

【讨论】:

    【解决方案2】:

    如果您使用 ksoap2 访问 asmx Web 方法,此代码可能会对您有所帮助

    public class ServiceHandler {
        private static String SOAP_ACTION;    
        private static String OPERATION_NAME;    
        private static final String WSDL_TARGET_NAMESPACE = "http://xxx.example.com/";    
        private static final String SOAP_ADDRESS = "http://xxx.example.com/WebService.asmx";
    
        /**
         * call WebMethod
         * 
         * @param param1 
         * @param param2 
         * 
         * @return //sample code
         */
        public static String callWebMethod(String param1,String param2){
    
            OPERATION_NAME = "myFunc";
            SOAP_ACTION = "http://xxx.example.com/myFunc";
    
            SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
    
            request.addProperty("param1",param1);
            request.addProperty("param2",param2);
    
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
    
            envelope.setOutputSoapObject(request);
    
            HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
    
            try{                  
                httpTransport.call(SOAP_ACTION, envelope);      
                SoapObject object = (SoapObject) envelope.getResponse();
                //get object
            }catch(Exception exception){
                System.out.println(exception.toString());
                return "";          
            }
        }
    
        return "";
    }
    

    【讨论】:

    • 好的,try/catch 错误是 org.xmlpull.v1.XmlPullParserException:预期:START_TAG {schemas.xmlsoap.org/soap/envelope} 信封(位置:START_TAG @2.44 in java.io.InputStreamReader。跨度>
    • 以上代码是示例代码,您需要对其进行修改以符合您的要求,并且由于此解决方案解决了您卡在 HttpTransportSE 的问题,您可以接受我的回答
    • 是的,我有一个类似的实现,但使用 AsyncTask 并且 webservice 方法不接收任何参数。这是唯一的区别。
    • 托管网络服务并尝试访问它
    猜你喜欢
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 2023-03-24
    • 2021-12-23
    • 2013-11-18
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多