PDA

View Full Version : اتصال برنامه ویندوز فرم به وب سرویس PHP



krasus
چهارشنبه 21 خرداد 1393, 17:25 عصر
سلام
یه وب سرویس با زبان php نوشتم و می خوام تو یه برنامه ویندوز فرم این وب سرویسو add کنم. حالا مشکل اینجاست که وقتی توی صفحه ی add web reference آدرس url این وب سرویسو می دم میگه :
The HTML document does not contain Web service discovery information.

توی صفحه زیر url که قراره توابع وب سرویسو نشون بده هم اینو می نویسه :
This service does not provide WSDL

من از این وب سرویس توی هاست استفاده کردم و جواب داده اما توی ویدوز فرم نمی تونم استفاده کنم. مشکل از کجاست؟

کد وب سرویس :




<?php
require_once "nusoap.php";

function jamesh($a, $b) {
return $a + $b;
}

$server = new soap_server();
$server->register("jamesh");
$server->service($HTTP_RAW_POST_DATA);
?>

CsharpNevisi
چهارشنبه 21 خرداد 1393, 19:07 عصر
باید از : WebResponse و WebRequest استفاده کنی ... !!!!

UnicodeEncoding encoding = new UnicodeEncoding();
//فیلد هارو به صورت کوئری استرینگ بفرست و در وب سرویس به صورت کوئری استرینگ بخون
string postData = "";//"login=1&user=123&pass=456";
byte[] data = encoding.GetBytes(postData);
//با وب رکوئست درخواست انجام عملیات رو میدم
WebRequest request = WebRequest.Create("http://Mysite.com/support.php?name=" + txtSuportName.Text + "&subject=" + txtSuportTitle.Text + "&email=" + txtSuportEmail.Text + "&text=" + txtSuportText.Text + "&user=" + textBoxX4.Text + "&pass=" + textBoxX6.Text);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
Stream stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
//با وب ریسپانس نتیجه رو دریافت میکنم
WebResponse response = request.GetResponse();
stream = response.GetResponseStream();


StreamReader sr = new StreamReader(stream);
if (sr.ReadToEnd() == "1")
{
buttonX16.Enabled = false;
MessageBox.Show("عملیات با موفقیت انجام شد", "توجه", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("عملیات با خطا مواجه شد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
sr.Close();
stream.Close();

krasus
چهارشنبه 21 خرداد 1393, 19:25 عصر
باید از : WebResponse و WebRequest استفاده کنی ... !!!!

UnicodeEncoding encoding = new UnicodeEncoding();
//فیلد هارو به صورت کوئری استرینگ بفرست و در وب سرویس به صورت کوئری استرینگ بخون
string postData = "";//"login=1&user=123&pass=456";
byte[] data = encoding.GetBytes(postData);
//با وب رکوئست درخواست انجام عملیات رو میدم
WebRequest request = WebRequest.Create("http://Mysite.com/support.php?name=" + txtSuportName.Text + "&subject=" + txtSuportTitle.Text + "&email=" + txtSuportEmail.Text + "&text=" + txtSuportText.Text + "&user=" + textBoxX4.Text + "&pass=" + textBoxX6.Text);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
Stream stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
//با وب ریسپانس نتیجه رو دریافت میکنم
WebResponse response = request.GetResponse();
stream = response.GetResponseStream();


StreamReader sr = new StreamReader(stream);
if (sr.ReadToEnd() == "1")
{
buttonX16.Enabled = false;
MessageBox.Show("عملیات با موفقیت انجام شد", "توجه", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("عملیات با خطا مواجه شد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
sr.Close();
stream.Close();


ممنون از راهنمایی تون اما فکر کنم نتونستم درست از کدی که دادین استفاده کنم.
120094
یه سوال دیگه با این روش من چه جوری می تونم از بین مثلا ۶ یا ۷ تا تابعی که توی فایل php قرار دادم یکیش رو انتخاب کنم و بهش مقدار بدم.
راهی نداره که مثل وبسرویسی که با asp نوشته می شه و به پروژه add می شه اینم همین جوری add کنیم و از توابعش استفاده کنیم؟

CsharpNevisi
چهارشنبه 21 خرداد 1393, 20:07 عصر
از سمت وب سرویس پاسخی دریافت نکرده ... !!!!
شما باید از سمت پی.اچ.پی یه جوابی بفرستید که تو این کد موفقیت با عدد 1 و عدم موفقیت با عدد 0 معین میشود ... !!!!


راهی نداره که مثل وبسرویسی که با asp نوشته می شه و به پروژه add می شه اینم همین جوری add کنیم و از توابعش استفاده کنیم؟
اطلاعی ندارم ... !!!!
من تو یکی از پروژه هام از این روش استفاده کردم ... !!!!
البته بگم با https کار نمیکنه ... !!!!

shahryari
چهارشنبه 21 خرداد 1393, 20:17 عصر
از webclient استفاده کن


<?php
$yas = $_POST['yas'];
if ($yas < 40)
{
echo "genc";
}
else
{
echo "yasli";
}
?>

void Button1Click(object sender, EventArgs e)
{
System.Net.WebClient w = new System.Net.WebClient ();
System.Collections.Specialized.NameValueCollection reqparm = new System.Collections.Specialized.NameValueCollection ();
reqparm.Add("yas",textBox1.Text );
byte[] b = w.UploadValues("http://localhost/Ali/post.php","POST",reqparm );
string s = System.Text.Encoding.UTF8.GetString(b);
MessageBox.Show(s);

}

http://ararz-soft.persiangig.com/post/post.JPG

krasus
چهارشنبه 21 خرداد 1393, 20:35 عصر
از سمت وب سرویس پاسخی دریافت نکرده ... !!!!


خوب آخه چرا جواب نگرفته. با یه فایل php از روی هاست که ازش جواب می گیرم. چرا کدی که نوشتم جواب نمیده؟

روشی که من برای ارسال اعداد ۱ و ۲ به آرگومان تابع استفاده کردم درست بوده؟



شما باید از سمت پی.اچ.پی یه جوابی بفرستید که تو این کد موفقیت با عدد 1 و عدم موفقیت با عدد 0 معین میشود ... !!!!

فکر نمی کنم توی این کد مشکل من عدد دریافتی ۱ یا ۰ باشه.

krasus
چهارشنبه 21 خرداد 1393, 20:52 عصر
از webclient استفاده کن



ممنون از راهنماییتون
با روش شما ۲ عدد فرستادم و مجموعش رو دریافت کردم.
اما چطور می تونم یه جدول از دیتابیسو به دیتا گریدویو بدم؟
یعنی من یه دستور SELECT رو با php انجام دادم و یه جدول گرفتم. اطلاعات رو توی یه جدول با html توی صفحه چاپ کردم. اما وقتی اون اطلاعات رو با کد شما توی مسیج باکس می خونم همشو با تگهای html نشون میده که منطقی هم هست.
120106120107
اما چطور این اطلاعات رو به دیتاگریدویو بدم؟

shahryari
چهارشنبه 21 خرداد 1393, 21:08 عصر
راهی که خودم استفاده میکنم (برای هاست های رایگان لینوکسی که دسترسی ریموت به mysql رو نمیدن ) به این شرحه:
در داخلی یک فایل php ابتدا به بانک متصل میشم و جدول و میخونم و با حلقه وایل دونه دونه فیلد هارو میخونم و هر فیلد رو با کار کتر خاصی از هم جدا کرده و در یک متغیر ذخیره میکنم
و همچنین ردیف ها رو هم با یک کاراکتر خاص دیگه از هم جدا میکنم و در خروجی چاپ میکنم
سپس میام سمت سی شارپ و از هم اسپلیت میکنم و در دیتا گرید میریزم

krasus
چهارشنبه 21 خرداد 1393, 21:22 عصر
راهی که خودم استفاده میکنم (برای هاست های رایگان لینوکسی که دسترسی ریموت به mysql رو نمیدن ) به این شرحه:
در داخلی یک فایل php ابتدا به بانک متصل میشم و جدول و میخونم و با حلقه وایل دونه دونه فیلد هارو میخونم و هر فیلد رو با کار کتر خاصی از هم جدا کرده و در یک متغیر ذخیره میکنم
و همچنین ردیف ها رو هم با یک کاراکتر خاص دیگه از هم جدا میکنم و در خروجی چاپ میکنم
سپس میام سمت سی شارپ و از هم اسپلیت میکنم و در دیتا گرید میریزم

یعنی هر چی اطلاعات بخوام از سرور بگیرم باید به صورت text بگیرم؟

راستی این روشی که استفاده می کنم که وب سرویس نمی شه؟می شه؟

کسی تابعی میشناسه که بتونم اطلاعات یه جدول رو راحت به دیتاگرید بدم؟

krasus
پنج شنبه 22 خرداد 1393, 17:08 عصر
از دوستان کسی راهی رو میشناسه که بشه از طریق webclient اطلاعات رو از دیتابیس یه mysql گرفت و به دیتاگریددیو داد؟
یعنی اینجوری mysql=>php=>C# application