# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ASP.NET Web Forms >  مقاله آموزشی : ساختن وب سرویس و تبادل اطلاعات با آن

## abolfazl585

با سلام
دو سه روز پیش برای یکی از مشتری ها، یک وب سرویس ساختم ، با خودم فکر کردم که بهتره تو سایت  هم بزارم. شاید واسه بعضیا مفید باشه.

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

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.WebServiceRequestType.DataTable);
Response.Write(getHTML(dt));

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

همین.

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

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

----------


## abadanboy

آقا ممنون از لطفت

----------


## merlin_vista

ممنون از لطفت !! خیلی استفاده کردیم !

----------


## abolfazl585

اگه سوالی در مورد این موضوع باشه در خدمت هستیم.

----------


## barati_a

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

<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

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

----------


## only45

سلام ابولفضل 585-
توضیحت فوق العاده بود
مهندس چنتا سوال داشتم میشه شمارتو داشته باشم بپرسم هرجا گیر کردم؟

----------


## aliphp1

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

----------


## mozhgan.karami

سلام من برای پایان نامه م باید چند تا وب سرویس طراحی کنم
الان یه  سرویس برای محاسبه 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

> اگه سوالی در مورد این موضوع باشه در خدمت هستیم.


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

----------


## paradi

سلام،ممنون از مطالب عاليتون
ميبخشيد شما در مورد راه اندازي يه سيستم راي گيري با استفاده از وب سرويس چيزي ميدونيد؟
ميشه در صورت امكان كمكم كنيد

----------

