我wondring如何使用香皂obejct摆脱WCF服务器数据 [英] I was wondring how to get data from WCF server using soap obejct

查看:140
本文介绍了我wondring如何使用香皂obejct摆脱WCF服务器数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望有人解决我的问题。我几乎用3天,以解决这个问题...

首先,这是网址: http://www.w3schools.com/webservices/tempconvert的.asmx?WSDL

下面是我的全code

 包com.webservice;进口org.ksoap2.SoapEnvelope;
进口org.ksoap2.serialization.SoapObject;
进口org.ksoap2.serialization.SoapPrimitive;
进口org.ksoap2.serialization.SoapSerializationEnvelope;
进口org.ksoap2.transport.HttpTransportSE;
进口android.app.Activity;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.Button;
进口android.widget.EditText;
进口android.os.AsyncTask;
进口android.util.Log; 公共类MainActivity扩展活动{  / **当第一次创建活动调用。 * /    私有静态最后弦乐SOAP_ACTION1 =htt​​p://www.w3schools.com/webServices/FahrenheitToCelsius;    私有静态最后弦乐SOAP_ACTION2 =htt​​p://www.w3schools.com/webservices/CelsiusToFahrenheit;    私有静态最后弦乐NAMESPACE =htt​​p://www.w3schools.com/webservices/;    私有静态最后弦乐METHOD_NAME1 =FahrenheitToCelsius;    私有静态最后弦乐METHOD_NAME2 =CelsiusToFahrenheit;    私有静态最终字符串URL =htt​​p://www.w3schools.com/webservices/tempconvert.asmx?WSDL;   私人按钮btnFar,btnCel,btnClear;  私人的EditText txtFar,txtCel;  私人字符串响应;  @覆盖  公共无效的onCreate(捆绑savedInstanceState){      super.onCreate(savedInstanceState);    的setContentView(R.layout.activity_main);      btnFar =(按钮)findViewById(R.id.btnFar);      btnCel =(按钮)findViewById(R.id.btnCel);      btnClear =(按钮)findViewById(R.id.btnClear);      txtFar =(EditText上)findViewById(R.id.txtFar);    txtCel =(EditText上)findViewById(R.id.txtCel);    btnFar.setOnClickListener(新View.OnClickListener()
    {        @覆盖
        公共无效的onClick(视图v){
            // TODO自动生成方法存根
            myAsyncTask myRequest =新myAsyncTask();
            myRequest.execute();
        }
    });}  私有类myAsyncTask扩展的AsyncTask<太虚,太虚,太虚>
  {
      @覆盖
      保护无效onPostExecute(虚空结果){
          super.onPostExecute(结果);
          txtFar.setText(响应);
          txtCel.setText(响应);
      }      @覆盖
      在preExecute保护无效(){
          super.on preExecute();
      }      @覆盖
      保护无效doInBackground(虚空......为arg0)
      {
          SoapObject要求=新SoapObject空间(namespace,METHOD_NAME1);
        request.addProperty(华氏,txtFar.getText()的toString());        SoapSerializationEnvelope信封=新SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = TRUE;
        envelope.setOutputSoapObject(请求);
        HttpTransportSE androidHttpTransport =新HttpTransportSE(URL);        尝试{
            androidHttpTransport.call(SOAP_ACTION1,信封);            SoapPrimitive结果=(SoapPrimitive)envelope.getResponse();             如果(结果!= NULL)
             {
                 Log.d(应用程序,+ result.getAttribute(2)的ToString());
                 响应= result.getAttribute(1)的ToString();
             }
             其他{}
      }赶上(例外五){            e.printStackTrace();      }
       返回null;
      }
  }

}

当我调试这个code,我觉得有连接的android以http因为

没问题

  androidHttpTransport.call(SOAP_ACTION1,信封); < ---我可以通过这条线。

然而,这code后,错误被引起的。

  SoapPrimitive结果=(SoapPrimitive)envelope.getResponse();


  

的SOAPFault - 故障code:香皂:客户端faultstring:服务器不承认HTTP头SOAPAction的价值:
   http://www.w3schools.com/webServices/FahrenheitToCelsius 。 faultactor:
  '空'的细节:org.kxml2.kdom.Node@42a91d88


我试过其他code这样的。

  SoapObject结果=(SoapObject)envelope.getResponse();
SoapObject结果=(SoapObject)envelope.bodyIn();

我猜测数据类型与此问题相关的。

所以,请检查我的code和网址,我写previously


解决方案

下面是详细信息,可以帮助您非常好的例子。

链接

我希望这会帮助你。

I hope anybody solve my problem. I'm almost using 3 days to solve this problem...

Firstly this is URL : http://www.w3schools.com/webservices/tempconvert.asmx?WSDL

Below is my full code

package com.webservice;

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 android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.os.AsyncTask;
import android.util.Log;



 public   class MainActivity   extends Activity 

{

  /** Called when the activity is first created. */

    private   static final String   SOAP_ACTION1 =   "http://www.w3schools.com/webServices/FahrenheitToCelsius";

    private   static final String   SOAP_ACTION2 =   "http://www.w3schools.com/webservices/CelsiusToFahrenheit";

    private   static final String   NAMESPACE =   "http://www.w3schools.com/webservices/";

    private   static final String   METHOD_NAME1 =  "FahrenheitToCelsius";

    private   static final String   METHOD_NAME2 =  "CelsiusToFahrenheit";

    private   static final String  URL =   "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";



   private Button   btnFar,btnCel,btnClear;

  private EditText   txtFar,txtCel;

  private String response;



  @Override

  public   void onCreate(Bundle savedInstanceState) 

{

      super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);



      btnFar = (Button)findViewById(R.id.btnFar);

      btnCel = (Button)findViewById(R.id.btnCel);

      btnClear = (Button)findViewById(R.id.btnClear);

      txtFar = (EditText)findViewById(R.id.txtFar);

    txtCel = (EditText)findViewById(R.id.txtCel);

    btnFar.setOnClickListener(new View.OnClickListener() 
    {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub          
            myAsyncTask myRequest = new myAsyncTask();
            myRequest.execute();                
        }
    });

}

  private class myAsyncTask extends AsyncTask<Void, Void, Void>
  {
      @Override
      protected void onPostExecute(Void result) {
          super.onPostExecute(result);
          txtFar.setText(response);
          txtCel.setText(response);
      }

      @Override
      protected void onPreExecute() {
          super.onPreExecute();       
      }

      @Override
      protected Void doInBackground(Void... arg0) 
      {
          SoapObject request =  new SoapObject(NAMESPACE,   METHOD_NAME1);        
        request.addProperty("Fahrenheit",txtFar.getText().toString());

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

        try {
            androidHttpTransport.call(SOAP_ACTION1, envelope);

            SoapPrimitive result = (SoapPrimitive)envelope.getResponse();          

             if(result !=   null)
             {
                 Log.d("App",""+result.getAttribute(2).toString());
                 response=result.getAttribute(1).toString();     
             }
             else{}


      }   catch (Exception e) {

            e.printStackTrace();

      }
       return null;        
      }   
  }

}

When I debug this code, I think there was no problem connecting android with http because

androidHttpTransport.call(SOAP_ACTION1, envelope); <--- I can pass this line.

However after this code, error was caused.

SoapPrimitive result=(SoapPrimitive)envelope.getResponse();

SoapFault - faultcode: 'soap:Client' faultstring: 'Server did not recognize the value of HTTP Header SOAPAction: http://www.w3schools.com/webServices/FahrenheitToCelsius.' faultactor: 'null' detail: org.kxml2.kdom.Node@42a91d88

I tried other code like this.

SoapObject result=(SoapObject)envelope.getResponse();
SoapObject result=(SoapObject)envelope.bodyIn();

I guess data type is related with this problem.

So please check my code and URL that I wrote previously

解决方案

Here is very nice example in details which can help you

link

I hope this will help you .

这篇关于我wondring如何使用香皂obejct摆脱WCF服务器数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆