首页新闻找找看学习计划

Android中调用已经部署到IIS中.net的webservice数据Android端无法执行报错的问题。求大神指点。

0
悬赏园豆:10 [已解决问题] 解决于 2016-06-24 11:56

今天尝试做的一个简单webservice,我已经部署到IIS中去了。服务器链接路径是http://192.168.127.105/WebService1.asmx?wsdl。

Android中我写的调用.net的webservice的源码

  1 /**
  2  * 
  3  * 
  4  * @author wym
  5  *
  6  */
  7 public class MainActivity extends Activity {
  8 
  9     final String METHOD_HELLO_WORLD = "HelloWorld";    
 10     final String METHOD_ECHO_MESSAGE = "EchoMessage";
 11     private TextView txtMsg;
 12     //服务器链接
 13     final String WEB_SERVICE_URL = "http://192.168.127.105/WebService1.asmx?wsdl";
 14     //默认命名空间
 15     final String Namespace = "http://tempuri.org/";
 16     protected void onCreate(Bundle savedInstanceState) {
 17         super.onCreate(savedInstanceState);
 18         setContentView(R.layout.activity_main);
 19         txtMsg=(TextView) findViewById(R.id.txtMsg);
 20     }
 21 
 22   //调用dohello方法
 23     public void doHellow(View view)
 24     {
 25         Log.i("---------doHellow---", "doHellow");
 26         Map<String, String> values = new HashMap<String, String>();
 27         values.put("msg", "这是Android手机doHellow方法发出的信息");
 28        Request(METHOD_HELLO_WORLD);
 29     }
    //调用doEchoMessage方法
30 public void doEchoMessage(View view) 31 { 32 Log.i("---------doEchoMessage---", "doEchoMessage"); 33 Map<String, String> values = new HashMap<String, String>(); 34 values.put("msg", "这是Android手机doEchoMessage方法发出的信息"); 35 Request(METHOD_ECHO_MESSAGE, values); 36 } 37 38 /** 39 * 执行异步任务 40 * 41 * @param params 42 * 方法名+参数列表(哈希表形式) 43 */ 44 public void Request(Object... params) { 45 new AsyncTask<Object, Object, String>() { 46 47 @Override 48 protected String doInBackground(Object... params) { 49 if (params != null && params.length == 2) { 50 return CallWebService((String) params[0], 51 (Map<String, String>) params[1]); 52 } else if (params != null && params.length == 1) { 53 return CallWebService((String) params[0], null); 54 } else { 55 return null; 56 } 57 } 58 59 protected void onPostExecute(String result) { 60 if (result != null) { 61 txtMsg.setText("服务器回复的信息 : " + result); 62 } 63 }; 64 65 }.execute(params); 66 } 67 68 /** 69 * 70 * 调用WebService 71 * @return WebService 返回值 72 */ 73 public String CallWebService(String MethodName, Map<String, String> params) { 74 Log.i("--------进入调用CallWebService------","CallWebService"); 75 //1、指定webservice的命名空间和调用的方法名 76 //SoapObject类的第一个参数表示WebService的命名空间, 77 //可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。 78 SoapObject request=new SoapObject(Namespace,MethodName); 79 80 81 // 2、设置调用方法的参数值,如果没有参数,可以省略, 82 if(params!=null){ 83 Iterator iter=params.entrySet().iterator(); 84 while(iter.hasNext()){ 85 Map.Entry entry=(Map.Entry) iter.next(); 86 request.addProperty((String) entry.getKey(), 87 (String) entry.getValue()); 88 } 89 } 90 // 3、生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述 91 //SOAP协议的版本号可以从WebService的WSDL文档中查看到 92 SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER12); 93 envelope.bodyOut = request; 94 // c#写的应用程序必须加上这句 95 envelope.dotNet = true; 96 //创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL: 97 HttpTransportSE ht=new HttpTransportSE(WEB_SERVICE_URL); 98 // 使用call方法调用WebService方法 99 try { 100 //Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。 101 ht.call(null, envelope); 102 } catch (HttpResponseException e) { 103 e.printStackTrace(); 104 } catch (IOException e) { 105 e.printStackTrace(); 106 } catch (XmlPullParserException e) { 107 e.printStackTrace(); 108 } 109 //使用envelope对象的getResponse方法获得WebService方法的返回结果 110 try { 111 SoapPrimitive result=(SoapPrimitive) envelope.getResponse(); 112 if(result!=null){ 113 Log.i("--------收到的回复------",result+""); 114 return result.toString(); 115 } 116 } catch (SoapFault e) { 117 Log.e("---------发生了错误---------", e.getMessage().toString()); 118 e.printStackTrace(); 119 } 120 return null; 121 } 122 123 }

当我在app中点击执行调用doHellow方法或者调用doEchoMessage方法时候程序报错,原因貌似是说在调用webService的时候异步线程中执行有误。报错截图如下:

 

 

问题补充:

错误之一:--------IOException发生了错误--------(8639): socket failed: EACCES (Permission denied)

-小确幸的主页 -小确幸 | 初学一级 | 园豆:43
提问于:2016-06-24 11:03
< >
分享
最佳答案
0
<uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
收获园豆:10
如此低调的男人 | 小虾三级 |园豆:840 | 2016-06-24 11:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册