abolfazl585
سه شنبه 17 مهر 1386, 14: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 نحوه دید ما به وب سرویس را مشخص می کند. بدین صورت که ما از طریق آن، مقدار برگشتی وب سرور را به این کامپوننت تعریف میکنیم.
این کامپوننت محصول کار دو روزه خودم می باشد و احتمالا روز به روز بر امکانات آن افزوده خواهد شد.
منتظر انتقادات و پیشنهادات شما هستم.
دو سه روز پیش برای یکی از مشتری ها، یک وب سرویس ساختم ، با خودم فکر کردم که بهتره تو سایت هم بزارم. شاید واسه بعضیا مفید باشه.
بیشترین استفاده از وب سرویس ها در مواقعی است که می خواهیم انجام یک تراکنش سنگین را بر روی چندین سرور تقسیم کنیم.
به این صورت که یک سرور مادر، درخواستی از یک کلاینت دریافت کرده و هر قسمت از ان را به یک سرور فرعی هدایت کرده و در نهایت، انها را جمع بندی کرده و به کلاینت باز میگرداند.
البته این کار توسط نرم افزارهای مختلف نیز قابل پیاده سازی است ولی بحث ما روی این مطلب است که ما میخواهیم این قضیه را خودمان مدیریت کنیم.
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 نحوه دید ما به وب سرویس را مشخص می کند. بدین صورت که ما از طریق آن، مقدار برگشتی وب سرور را به این کامپوننت تعریف میکنیم.
این کامپوننت محصول کار دو روزه خودم می باشد و احتمالا روز به روز بر امکانات آن افزوده خواهد شد.
منتظر انتقادات و پیشنهادات شما هستم.