# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > WCF , Web Services , .Net Remoting >  طریقه نوشتن وب سرویس

## raha2006

سلام
دوستان من پروژه نهاییم در مورد وب سرویسه می خوام یک وب سرویس بسازم و در طرف دیگر یک سری سرویس گیرندهها از آن استفاده کنند
مثلا اگر بخوام یک سرویس گیرنده درخواست جستجوی یک نامی را از وب سرویس کنه این ردوبدل اطلاعات به چه صورتی نوشته می شود جواب که به صورت یک فایل xml است چه جوری سمت سرویس گیرنده استفاده می شه 
میشه منو راهنمایی کنید و یک کتاب یا یک سایت یا یک فایل نمونه آموزشی برام بزارید ممنون می شم  :گریه:

----------


## ایمان اختیاری

ببینید .. وب سرویس رو می شه با زبانهای مختلف نوشت .. مثلا  #C جاوا یا موارد دیگه .. من خودم با سی شارپ نوشتم .. 
شما با vs ( اگه 2010 باشه ) یک asp empty site  ایجاد می کنید سپس یک وب سرویس به اون اضافه می کنید .. توی وب سرویس قسمتی هست به اسم [web method] که کداتون رو توی اون می نویسید .. 
بعدش که کامپایل شد و اجراش کردین یه پروژه دیگه ایجاد می کنید و وب سرویس رو به اون اضافه می کنید...
البته خیلی خیلی کلی گفتم .. 
سعی می کنم کمکتون کنم ولی خودتون هم باید یه کم کار کنید . 
موفق باشید

----------


## raha2006

سلام آقای اختیاری
منم کلیشو بلدم ولی از شما خواهش می کنم ریزتر برام توضیح بدین واقعاً ممنون می شم

----------


## ایمان اختیاری

سلام .. با چه زبانی بلد کار کنید تا بتونم دست و پا شکسته کمک کنم ..

----------


## raha2006

من با C#‎‎  تحت وب دات نت می خوام کار کنم. واقعاً در حق من لطف می کنی اگه کمکم کنی

----------


## ایمان اختیاری

خواهش . کدوم ورژن vs  رو دارید ؟ 2008 یا 2010

----------


## raha2006

من vs ورژن 2008 رو دارم sql  من هم 2005 است

----------


## ایمان اختیاری

این  لینک رو یه نیگاه بندازین : 
http://softprojects.org/fa/KB/Articl...ebService.aspx
باز اگه سوالی بود تا اونجایی که بتونم کمک می کنم.

----------


## ایمان اختیاری

ببخشی الان چه مشکلی دارین .. اون لینکا که گذاشتم رو نیگا کردین ؟

----------


## raha2006

من تو این قسمتها مشکلی ندارم من نمی دونم چه جوری از اون فایل xml استفاده کنم و نتیجه سرچ را در سمت کلاینت نمایش بدم

----------


## ایمان اختیاری

ببینید .. من از این روش استفاده کردم : 
از منوی project گزینه ی add service reference رو انتخاب کنید . از پنجره ای که باز شده مورد advance رو انتخاب کنید از قسمت پایین  add web refrence رو انتخاب کنید .. در پنجره ی جدید آدرس فایل سرویستون رو بدین و دکمه ی سبز رنگ رو انتخاب کنید تا لیست توابع سرویس نشون داده بشه .. بعدش دکمه ی add reference رو بزنید تا به پروژه تون اضافه بشه .. 
نهایت ازش یک شیی بسازید و مثه بقیه اشیایی که هستش می تونید باهاش کار کنید .

----------


## ایمان اختیاری

البته این چیزایی که گفتم توی vs2010 هستش ..

----------


## ایمان اختیاری

دقیقا بگین مشکل شما کجاست ؟ 
این سه خط کد رو نیگا کنید : 

string result="";
            WebReference.Service1 web = new WebReference.Service1();
            result = web.checkusers(textBox1.Text,textBox2.Text,textBox  3.Text)

توی خط اول یه متغییر از نوع رشته ای تعریف کردم .
توی خط دوم یک شیی جدید از نوع وب سرویس ایجاد کردم
توی خط سوم یک تابع که توی وب سرویس نوشته شده رو فراخوانی کردم .این تابع سه تا ورودی داره و یک خروجی 
باز اگه جایی مشکل داشتین بگین تا کمک کنم

----------


## raha2006

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

----------


## ایمان اختیاری

خب بازم کاری نداره .. شما توی قسمت وب تحت عنوان [WebMethod] تابع مورد نظر رو می نویسید که با بانک در تعامل باشه و نتیجه ی خروجی رو به عنوان Return این تابع بر می گردونه .. 
توی قسمت کلاینت هم همون تابع رو مثل مثالی که براتون گفتم فراخوانی می کنید که خروجی تابع می شه نتیجه ی تابعی که درقسمت وب سرویس هست ..
البته من نمی دونم دقیقا می خواین چیکار کنید و چه خروجیی مد نظرتونه .. بگین تا بتونم بهتر راهنمایی کنم

----------


## raha2006

سلام 
من پروژه ام رو تا یک جاهایی پیش بردم
به این شکل عمل می کند که در سمت کلاینت کد ملی سرچ می شود و به وب سرویس فرستاده می شود و متد سرچ صدا زده می شود و در سمت وب سرویس جستجو می شود نتیجه را به صورت دیتاست بر می گرداند و به datasource ،گرید ویو در سمت کلاینت وصل کردم و در آن نمایش می دهد
حالا نمی دونم به همین شکل درسته یا نه؟

من در سمت کلاینت اسم فیلدهایی که در گرید ویو تنظیم کردم همان نامهایی است که در دیتابیس وب سرویس تعریف کردم ، حالا آیا در تمام وب سرویس ها ما باید اسم فیلدهای بانک را بدانیم تا بتوانیم از آنها استفاده کنیم؟

----------


## raha2006

آقای موسوی می تونم از شما کمک بگیرم؟

----------


## mehdi.mousavi

> آقای موسوی می تونم از شما کمک بگیرم؟


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

موفق باشید.

*پاورقی:* دوست عزیز، من همه مطالب رو نمیخونم که شما پیام میدید، "آقای موسوی، میتونم از شما کمک بگیرم؟"  :لبخند:  تو این جور مواقع یه پیام خصوصی برام بفرستید و آدرس به پست مورد نظر رو بدید تا ببینمش. الان هم اگر آقای اختیاری اینکارو نکرده بودن، من شاید هرگز این پست شما رو نمیدیدم.

----------


## raha2006

ممنون از پاسختون آقای موسوی و ممنون از پیگیریهای آقای اختیاری
من پروژه نهاییم در مورد وب سرویسه می خوام یک وب سرویس بسازم و در طرف دیگر یک سری سرویس گیرندهها از آن استفاده کنند (در vs 2008 دیتابیسم sql 2005)
مثلا اگر بخوام یک سرویس گیرنده درخواست جستجوی یک نامی را از وب سرویس کنه این ردوبدل اطلاعات به چه صورتی نوشته می شود جواب که به صورت یک فایل xml است چه جوری سمت سرویس گیرنده استفاده می شه 
من پروژه ام رو تا یک جاهایی پیش بردم
به این شکل عمل می کند که در سمت کلاینت کد ملی سرچ می شود و به وب سرویس فرستاده می شود و متد سرچ صدا زده می شود و در سمت وب سرویس جستجو می شود نتیجه را به صورت دیتاست بر می گرداند و به datasource ،گرید ویو در سمت کلاینت وصل کردم و در آن نمایش می دهد
حالا نمی دونم به همین شکل درسته یا نه؟

من در سمت کلاینت اسم فیلدهایی که در گرید ویو تنظیم کردم همان نامهایی است که در دیتابیس وب سرویس تعریف کردم ، حالا آیا در تمام وب سرویس ها ما باید اسم فیلدهای بانک را بدانیم تا بتوانیم از آنها استفاده کنیم؟
من در سمت کلاینت یک بانک دارم و در سمت وب سرویس بانکی دیگر، حالا چه جوری هر چند وقت یکبار می توانم محتوای بانک کلاینت را به صورت xml به بانک دیتابیس اضافه نمایم؟
ممنون می شم راهنماییم کنید

----------


## Saeed_m_Farid

> من در سمت کلاینت یک بانک دارم و در سمت وب سرویس بانکی دیگر، حالا چه جوری هر چند وقت یکبار می توانم محتوای بانک کلاینت را به صورت xml به بانک دیتابیس اضافه نمایم؟


اون آقای موسوی سرشون شلوغ هست، من آقای موسوی جواب میدم!  :چشمک: 
منظورتون از_ "بصورت XML"_ چیه؟ اگه خروجی Dataset خود دات نت هست و برنامه ها (وب سرویس و کلاینت ها) هردو از این فریم ورک استفاده می کنن، مشکلی تو استفاده ازشون نخواهید داشت، خود دات نت میتونه این نوع Xml رو تفسیر کنه؛ اون چیزی که شما بعنوان خروجی وب متد می بینید (تو Explorer تون) لازم نیست سمت کلاینت بشینید یکی یکی تفسیر کنید، کافیه فقط وب متد رو سمت کلاینت صدا کنید و اگه خروجی از انواع داده معمولی (int، string، Boolean و ...) بود که فقط انتساب کافیه و درغیر اینصورت یا باید خودتون Structure یا نوع داده رو سمت وب سرویس تعریف کنید و سمت کلاینت اونها رو استفاده کنید و ... اگر هم هر دو طرف تحت یک فریم ورک هستن که انواع پیچیده داده (مثل همین Dataset) رو میشه مستقیم انتساب داد.

در سمت کلاینت ها هم هیچ اسم فیلدی در گریدویو و ... تنظیم نکنید، خودش بایند میکنه. در ضمن من درست متوجه نشدم، شما وب سرویس رو نوشتید و الان در استفاده اش مورد دارید یا اینکه میخواهید شروع کنید؟ اگه اینطوره یه نمونه از وب متد هاتون قرار بدین تا مشکل یا درست و غلط بودنش رو با هم بررسی کنیم، مثلاً اگه وب سرویس شما TestService باشه و با نام SampleWebserviceWR در قسمت Web Reference اضافه اش کرده باشید و یک وب متد بنام GetSampleTableContents تو سرویس ها تون داشته باشید، برای استفاده از این سرویس در  گرید ویو بنام GetSampleTableContents میشه مثلاً بصورت زیر عمل کرد :

    SampleWebserviceWR testWS = new  SampleWebserviceWR.TestService();
    DataSet dsSample = testWS.GetSampleTableContents(edtTableName.Text);
        if (dsSample.Tables.Count > 0)
    {
        this.dataGV.DataSource = dsSample.Tables[0];
        this.dataGV.AutoResizeColumns();
        this.Refresh();
    }


در نهایت همونطوریکه آقای موسوی چندین بار گفتن، استفاده از WS های asmx (مبتنی بر SOAP و WSDL) دیگه برای نیازهای فعلی -  _"نیازهای دنیای واقعی از قبیل Encrypt کردن پیامهای رد و بدل شده بین Client  و Server (بخصوص بر اساس X.509 و ...)، انتقال Exception ها و ... در  ASP.NET Web Services اگر غیر ممکن نباشه، بسیار دشوار هستش"_- جوابگو نخواهد بود و باید بریم سراغ WSE که متاسفانه هنوز بنده اشراف کاملی بر این مفاهیم ندارم و از طرف دیگه نیاز به فریم ورک 3.5 داره که هنوز نصب اون برای ما در تمام سرورها امکان پدیر نیست و نمی تونم در اون مورد اظهار نظر کنم.

----------


## mehdi.mousavi

> اون آقای موسوی سرشون شلوغ هست، من آقای موسوی جواب میدم!


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




> از طرف دیگه نیاز به فریم ورک 3.5 داره که هنوز نصب اون برای ما در تمام سرورها امکان پدیر نیست و نمی تونم در اون مورد اظهار نظر کنم.


WSE 3.0 که آخرین نسخه WSE هستش (و خواهد بود)، بر مبنای .NET Framework 2.0 ارائه شده و نیازی به .NET FX 3.5 نداره. ضمنا، ابزار مربوطه فقط روی VS2005 نصب میشه و در VS2008 دیگه از اون پشتیبانی نمیشه (در واقع مایکروسافت میخواد توسعه دهندگان رو به سمت WCF سوق بده).

موفق باشید.

----------


## raha2006

ممنون از راهنمایی هاتون

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

----------


## Saeed_m_Farid

> ...
> 
>  به نظر شما برای این جابجایی باید چه کار کنم؟چه جوری می تونم اطلاعات یک بانک را به بانک دیگه اضافه کنم؟برای یکپارچگی اطلاعات چه کار کنم؟


بانک های شما در دو سمت چی هستند؟ مثلاً هر دو از یک نوع یا یکی اوراکل و دیگری SQL ...خیلی راهها داره که ربطی به وب سرویس نداره و من هم همینکار رو دارم انجام میدم، شما وب سرویس رو نوشتید تموم شده و در کلاینت ها هم اون dataset ها رو دارید استفاده می کنید، بقیه اش یه بحث دیگه است که به وب سرویس مربوط نمیشه.اگه دو طرف یکی باشند، معمولاً فراهم کنندگان بانک اطلاعاتی (اوراکل، Sql، Postgre و ...) روشهایی براشون ارائه کردن که من زیاد در جریان شون نیستم و باید تو بخش های مرتبط بانک اطلاعاتی بپرسید: مثلاً Server Clustering، Redundant Servers، RAC و ... با فرض اینکه همچین امکانی نیست (مثلاً یک طرف اوراکل و یکی Sql) من اینکار رو می کنم:

*سمت سرور* : یه وب سرویس برای گرفتن اطلاعات، که دارای سرویس هایی برای گرفتن مشخصات اشیاء بانک به تفکیک (GetSourceDBObjects)، جداول بانک (GetSourceDBTables)، فیلدهای جدول خاص (GetTCITableFields)، داده های جدول (GetTableContents) و سایر موارد درصورت نیاز.*سمت کلاینت ها* : یک سرویس ویندوز که متناوباً این سرویس ها رو فراخوانی میکنه و در صورت نیاز (مثلآً افزودن رکوردها به جداول، تغییر فیلدها، وجود جداول اضافی، نیاز به SP، Trigger و ... که در جدولی جداگانه که برای اینکار درست شده - مثلاً mediation - به روز میشود و نام جداول یا اشیائی که قرار است آپدیت شوند رو درج میکند) جداول و اشیاء رو آپدیت می کند.
برای کپی داده ها در سمت کلاینت ها هم در یک Thread جداگانه از SqlBulkCopy استفاده کردم که BatchSize و Notify و ... داره و خیلی تو کارآیی موثر هست.

----------


## raha2006

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

----------


## raha2006

میشه بگید بحث سرویس های وب سرویسی که در sql serserver 2005 اضافه شده در کدام قسمت با چه عنوانی است؟

----------


## araz_pashazadeh

> خواهش . کدوم ورژن vs رو دارید ؟ 2008 یا 2010


 با عرض سلام وخسته نباشید
مگه فرقی هم می کنه که با کدوم ورژن کار کنیم :متفکر: 
اگر بله چه تفاوتی دارن؟

----------


## KavoshGar_ir

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


1. برای تبدیل بانک به xml کافیه خواندن و نوشتن در فایل xml را بدانید. اطلاعات را هم از بانک و جداول بگیرید و در فایل xml رایت کنید!

2.من قبلا چنین کاری کردم یعنی اطلاعات یک بانک را در بانک دیگه اضافه میکردم.روش کارم هم خیلی ساده بود کافیه کانکشن استرینگ های دو بانک را داشته باشید و از یک یا ترجیحا دو کلاس MYDB ( لایه 3 )  استفاده کنید.زمانی که نیاز به درج اطلاعات در بانک دوم داشتید از کلاس دوم و کانکشن استرینگ دوم استفاده کنید!

3.برای این پروژه اگر عنوان شده حتما از وب سرویس استفاده کنید که هیچ! اما اگر عنوان نشده نیازی به وب سرویس نیست کلیه اطلاعات را در یک سایت میتونید مدیریت کنید.

موفق باشید.

----------


## raha2006

> 1. برای تبدیل بانک به xml کافیه خواندن و نوشتن در فایل xml را بدانید. اطلاعات را هم از بانک و جداول بگیرید و در فایل xml رایت کنید!
> 
> 2.من قبلا چنین کاری کردم یعنی اطلاعات یک بانک را در بانک دیگه اضافه میکردم.روش کارم هم خیلی ساده بود کافیه کانکشن استرینگ های دو بانک را داشته باشید و از یک یا ترجیحا دو کلاس MYDB ( لایه 3 )  استفاده کنید.زمانی که نیاز به درج اطلاعات در بانک دوم داشتید از کلاس دوم و کانکشن استرینگ دوم استفاده کنید!
> 
> 3.برای این پروژه اگر عنوان شده حتما از وب سرویس استفاده کنید که هیچ! اما اگر عنوان نشده نیازی به وب سرویس نیست کلیه اطلاعات را در یک سایت میتونید مدیریت کنید.
> 
> موفق باشید.


سلام ممنون از پاسختون
من در پروژه ام حتما باید از وب سرویس استفاده کنم . این موضوعی که توضیح دادید رو می شه نمونه برام بذارید ممنون می شم  در ضمن به من پیشنهاد شده از replication  در sql استفاده کنم

----------


## 00maryamgh

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

----------

