PDA

View Full Version : مقاله آموزشی : ساختن وب سرویس و تبادل اطلاعات با آن



abolfazl585
سه شنبه 17 مهر 1386, 13:53 عصر
با سلام
دو سه روز پیش برای یکی از مشتری ها، یک وب سرویس ساختم ، با خودم فکر کردم که بهتره تو سایت هم بزارم. شاید واسه بعضیا مفید باشه.

بیشترین استفاده از وب سرویس ها در مواقعی است که می خواهیم انجام یک تراکنش سنگین را بر روی چندین سرور تقسیم کنیم.
به این صورت که یک سرور مادر، درخواستی از یک کلاینت دریافت کرده و هر قسمت از ان را به یک سرور فرعی هدایت کرده و در نهایت، انها را جمع بندی کرده و به کلاینت باز میگرداند.
البته این کار توسط نرم افزارهای مختلف نیز قابل پیاده سازی است ولی بحث ما روی این مطلب است که ما میخواهیم این قضیه را خودمان مدیریت کنیم.

IWebService.dll و تمام فرمهای این سولوشن مبتنی بر Dot Net 2 میباشند.

IWebService.dll لایه ارتباطی ما با سرورها است.
این کامپوننت به ما کمک میکنه تا براحتی یک درخواست به یک سرور فرعی فرستاده و جواب آن را در یک متغیر نگاه داشت. در ادامه با این کامپوننت بیشتر آشنا خواهیم شد.

با استفاده از منوی File --> New --> Web Site یک WebApp درست کنید.

می خواهیم یک وب سرویس بسازیم که بخشی از فعالیت سرور اصلی روی آن باشد

منوی WebSite --> Add New Item را کلیک و گزینه Web Form را انتخاب و نام آن را به WebService.aspx تغییر داده و روی دکمه Add کلیک کنید.
کلید F7 را فشار داده و وارد قسمت کد نویسی شوید.
حال در داخل رویداد Page_Load هر وظیفه ای که وب سرویس شما بر عهده دارد را کد نویسی کنید.
بطور مثال این وب سرویس وظیفه دارد که یک تراکنشی را انجام داده و نتیجه را بصورت یک Xml ویا DataTable و... بر گرداند.


protectedvoid Page_Load(object sender, EventArgs e)
{if (Request["userid"] != "1") Response.End();
DataTable dt = newDataTable("XML");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("descript", typeof(string));
for (int i = 0; i < 10; i++)
dt.Rows.Add(newobject[] { i, "descript" + i });
dt.WriteXml(Response.OutputStream, XmlWriteMode.WriteSchema);
Response.End();
}

این ساده ترین کاری است که یک وب سرویس می تواند انجام دهد.
با استفاده از این روش میتوان بر روی هاست هایی که اجازه دسترسی Remote به SqlServer را نمیدهند دسترسی پیدا کرد.(به این صورت که این وب سرویس را بر روی هاست UpLoad نموده و با استفاده از IWebService.dll هر نوع درخواستی را اجرا کرد.
تذکر:برای انجام این کار باید تمام جوانب امنیتی را در نظر گرفت.اعم از اینکه وب سرویس شما قابلیت اعتبار سنجی کاربر درخواست کننده را دارا باشد و بسیاری مطالب دیگر که از حیطه این مقاله خارج است.

حال ما به یک Application نیاز داریم که که با این سرویس ارتباط برقرار کرده، درخواست خود را ارسال و نتیجه را مورد بهره برداری قرار دهد.

بار دیگر یک پروژه جدید ایجاد کنید.
از منوی WebSite گزینه New Folder را کلیک کرده و نام پوشه را به Bin تغییر دهید.
فایل IWebService.dll را در پوشه Bin کپی کنید.

در این قسمت قصد داریم فقط یک درخواست به وب سرویس فرستاده و نتیجه را به کاربر نشان دهیم . طراحی فرم و ... بر عهده خودتان.
وارد قسمت کدنویسی مربوط به فرم Default.aspx شوید.

رویداد Page_Load را پیدا کرده و داخل آن ابتدا وب سرویس خود را تعریف می کنیم:


IWebService ws = newIWebService();
ws.RemoteUrl = "http://localhost/WebServiceSample/WebService.aspx?userid=1";
ws.Connect();

ارتباط برقرار شد، درخواست به وب سرویس ارسال و نتیجه در ws.BaseStream ذخیره شد.
تذکر:بررسی اینکه ارتباط داده ای اپلیکیشن ما با WebServer برقرار است یا نه،انجام نشده.

حال با توجه به اینکه میدانیم نوع برگشتی وب سرویس، از نوع DataTable می باشد لذا ادامه کد های خود را به این صورت می نویسیم:


DataTable dt = (DataTable)ws.GetData(IWebService.WebServiceReques tType.DataTable);
Response.Write(getHTML(dt));

تابع getHTML محتوای یک DataTable را به کد های HTML تبدیل می کند.

همین.

توضیحات تکمیلی:
IWebService.dll دارای دو متد بنام Connect و GetData میباشد.
تا زمانی که متد Connect فراخوانی نشود، تابع GetData باعث تولید خطای مربوطه می شود.
WebServiceRequestType نحوه دید ما به وب سرویس را مشخص می کند. بدین صورت که ما از طریق آن، مقدار برگشتی وب سرور را به این کامپوننت تعریف میکنیم.

این کامپوننت محصول کار دو روزه خودم می باشد و احتمالا روز به روز بر امکانات آن افزوده خواهد شد.
منتظر انتقادات و پیشنهادات شما هستم.

abadanboy
سه شنبه 17 مهر 1386, 14:06 عصر
آقا ممنون از لطفت

merlin_vista
سه شنبه 17 مهر 1386, 14:16 عصر
ممنون از لطفت !! خیلی استفاده کردیم !

abolfazl585
چهارشنبه 18 مهر 1386, 08:44 صبح
اگه سوالی در مورد این موضوع باشه در خدمت هستیم.

barati_a
چهارشنبه 08 اسفند 1386, 10:10 صبح
با سلام
برای اینکه بتوانیم عمل درج یا اپدیت را انجام دهیم متد های زیر را نوشتم اما موقع استفاده متد درج برای گرفتن مقدار از داخل تکست باکس وب سایت باید چه کار کنم؟
و متد اپدیت چه طور مقداری از دیتا گرید به صورت دیتا ست دریافت میکند؟
با تشکر


<WebMethod()> _
PublicFunction inserts(ByVal sql AsString, ByVal str AsString) As DataSet
con = New SqlConnection("server=vira\sqlexpress;uid=p;pwd=1;database=anbar")
con.Open()
dad = New SqlDataAdapter(sql, con)
cmd = New SqlCommand(str, con)
'cmd.Connection.Open()
cmd.ExecuteNonQuery()
'cmd.Connection.Close()
dad.Fill(ds)
con.Close()
Return ds
EndFunction
<WebMethod()> _
PublicFunction updates(ByVal sql AsString, ByVal ds As DataSet) As DataSet
con = New SqlConnection("server=vira\sqlexpress;uid=p;pwd=1;database=anbar")
con.Open()
'sql = "select * from f"
dad = New SqlDataAdapter(sql, con)
cb = New SqlCommandBuilder(dad)
dad.Update(ds)
Return ds
EndFunction

و طرف وب سایت

ProtectedSub Button2_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles Button2.Click
sql = "select * from place"
ds = GridView1.DataSource
GridView1.DataSource = a1.updates(sql, ds)
dschange = ds.GetChanges()
ds.Merge(a1.updates(sql, dschange), True)
EndSub

armin.g
دوشنبه 30 شهریور 1388, 16:35 عصر
خیلی عالی بود، مرسی
فقط یه سوال با ربط، یه سوال نیمه با ربط و یه درخواست
آیا از Web Service ساخته شده توسط ASP.Net می تونیم تو php استفاده کنیم؟
آیا با php هم می تونیم web service بسازم؟
با توجه به اینکه به احتمال خیلی خیلی زیاد (بله)، اگر تاپیکی در این سایت هست که به این مطلب اشاره کرده لطف کنید لینک بدید.
موفق باشید.

only45
یک شنبه 24 دی 1391, 16:09 عصر
سلام ابولفضل 585-
توضیحت فوق العاده بود
مهندس چنتا سوال داشتم میشه شمارتو داشته باشم بپرسم هرجا گیر کردم؟

aliphp1
شنبه 04 آبان 1392, 22:01 عصر
سلام ممنون از شما
من یک سوال داشتم اگر دوستانی که حرفه ای هستن لطف کنن جواب بدن ممنون میشم
اگه بخوایم یه وبسرویس که داکیومنتش رو برای دات نت داریم برای پی اچ پی استفاده کنیم مهمترین نکاتی که باید توجه کنیم چیه ؟
یعنی وبسرویسی داریم که با دات نت نوشته شده حالا بخوایم با پی اچ پی ازش استفاده کنیم

mozhgan.karami
یک شنبه 22 تیر 1393, 17:13 عصر
سلام من برای پایان نامه م باید چند تا وب سرویس طراحی کنم
الان یه سرویس برای محاسبه BMI بدن(توده بدنی) طراحی کردم سرویسم درست کار میکنه ولی وقتی که اونو توی یه وب پیج فراخوانی میکنم اصلأ کار نمیکنه
ممنون میشم اگه راهنماییم کنین.
این کد مربوط به وب سرویسم:

[WebMethod]
public float BMI(float height, float weight)
{
float height_ = height / 100;
float BMI;
BMI= weight / (height_ * height_);
return BMI;

}
اینم کدیه که توی وب فرم نوشتم:
یه فرم براش طراحی کردم که دوتا مقدار رو توی textbox میگیره ،بعد داخل رویداد button_click ای کد رو نوشتم
نمیدونم مشکل از کجاست
خیلی به کمک نیاز دارم ممنون میشم اگه راهنماییم کنین


float a = float.Parse(TextBox1.Text.ToString());
float b = float.Parse(TextBox2.Text.ToString());
localhost.WebService1 wb = new localhost.WebService1();
float c = wb.BMI(a,b);
Label.Text = c.ToString();

bluemoonatnight
یک شنبه 23 شهریور 1393, 13:29 عصر
اگه سوالی در مورد این موضوع باشه در خدمت هستیم.

سلام خسته نباشین
ببخشید میتونید مراحل publish کردن وب سرویس رو به یه هاست تو اینترنت توضیح بدین .
خیلی ممنون .

paradi
چهارشنبه 07 بهمن 1394, 15:00 عصر
سلام،ممنون از مطالب عاليتون
ميبخشيد شما در مورد راه اندازي يه سيستم راي گيري با استفاده از وب سرويس چيزي ميدونيد؟
ميشه در صورت امكان كمكم كنيد