PDA

View Full Version : مشکل با فراخوانی وب سرویس



Louai_M
جمعه 05 تیر 1394, 18:33 عصر
سلام دوستان من تو برنامه نویسی اندروید تازه کارم

یه وب سرویس با php و nusoap درست کردم (البته تست شده و آنلاین جواب میده) که کدش زیر گذاشتم


<?php
// Pull in the NuSOAP
require_once('lib/nusoap.php');
// Create the server instance
$server = new soap_server();
// Initialize WSDL support

$server->configureWSDL('MyService', 'urn:MyService');
// Character encoding
$server->soap_defencoding = 'utf-8';
//-------------------------------------------------
//Registrations of our functions
//Register GetData function
$server->register(
'GetDataAbout',
array('id' => 'xsd:int'),
array('return' =>'xsd:string'),
'urn:MyServicewsdl',
'urn:MyServicewsdl#GetDataAbout',
'rpc',
'literal',
'Some comments about function 2'
);
//-----
//-------------------------------------------------
//Our web service functions will be here.
//Body GetData function
function GetDataAbout($id) {
mysql_connect("localhost","***","***");
mysql_select_db("***");
mysql_query('SET NAMES \'utf8\'');
mysql_query('SET NAMES \'utf8\'');
$sql = "SELECT content FROM tblabout WHERE id = '$id'";
$result = mysql_fetch_array(mysql_query($sql));
return $result['content'];
}
//-------------------------------------------------
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>




و می خوام تو اندروید فراخوانی کنم با کد های زیر



import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope ;
import org.ksoap2.transport.HttpTransportSE;

import java.io.IOException;

/**
* Created by Novin Pendar on 06/26/2015.
*/
public class AboutActivity extends ActionBarActivity {
private static final String SOAP_ACTION = "urn:MyService#GetDataAbout";
private static final String METHOD_NAME = "GetDataAbout";
private static final String NAMESPACE = "urn:MyService";
private static final String URL = "http://service.abdollahtamimi.com/server.php";

TextView v = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_about);




SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

//SoapObject
request.addProperty("id", "1");
//Create envelope
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
//Set output SOAP object
envelope.setOutputSoapObject(request);
//Create HTTP call object
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

try
{
androidHttpTransport.call(SOAP_ACTION, envelope);
//Object response = envelope.getResponse();
Object response = envelope.bodyIn;
((TextView)findViewById(R.id.txtWebService)).setTe xt(response.toString());
}

catch (Exception exception)
{
((TextView)findViewById(R.id.txtWebService)).setTe xt(exception.toString());
}
}
}




اما موقع اجرا خطای java.io.ioexception را میده

حال باید چکار کنم مشکل کدم کجاست

کل کار وب سرویسم یه id می گیره و محتوای فیلد contentشو نشون میده همین

Louai_M
یک شنبه 07 تیر 1394, 09:38 صبح
دوستان کسی نیست ما را راهنمائی کنه

Nevercom
یک شنبه 07 تیر 1394, 17:49 عصر
ساده ترین راه برای من استفاده از کتابخانه ی kSOAP2 و سایت http://www.wsdl2code.com/pages/home.aspx برای تولید کلاس های موردنیاز بوده.

djtrex
دوشنبه 08 تیر 1394, 01:38 صبح
من پیشنهاد میکنم از xml و soap استفاده نکنید بار پردازشی سمت اندروید بیشتر از json هست + حجم دیتا هم توی soap بیشتر هست. api تون به صورت Json RESTful بنویسید.
خیلی از سرویس های وب مثل گوگل هم مدت ها قبل Soap Api خودشون رو غیرفعال کردند.

توضیحات بیشتر:
http://blog.feedly.com/2009/03/03/jsonrest-vs-xmlsoap/
https://www.captechconsulting.com/blogs/soap-vs-rest-for-mobile-services

sobhmoud
دوشنبه 08 تیر 1394, 03:30 صبح
خطایی که بهت میده مربوط به IO هست تو قسمت catch برنامت کد زیر رو بنویس بعد برو تو لاگکتت ببین چی نوشته
Log.e("Soap_Error", e.getMessage());