فراخوانی Web Service با استفاده از SOAP Request
چهارشنبه 3 شهریور 1395در این مقاله ، نحوه ارسال یک درخواست به صورت Post به یک وب سرویس با استفاده از SOAP و سپس گرفتن پاسخ از آن را خواهیم آموخت.
امروزه سرویس های زیادی مانند WCF, REST, Web API و ... در دسترس هستند. اما هنوز Web Service ها نقش مهمی در ایجاد ارتباط بین برنامه های چندسکویی (cross platform) ایفا می کنند و اطلاعات را از یک برنامه به سایر برنامه ها منتقل می کنند.
ما در این مقاله از یک وب سرویس از پیش ساخته شده استفاده می کنیم و به همین دلیل، دیگر مراحل ساخت وب سرویس را توضیح نمی دهیم. فقط به نحوه فراخوانی وب سرویس با استفاده از SOAP request می پردازیم.
گام اول: بدنه Web Service SOAP Request را پیدا کنید.
ما یک وب سرویس داریم که بر روی IIS محلی ما host شده است . بنابراین آدرس وب سرویس را در مرورگر وارد کنید و سپس صبر کنید تا صفحه زیر برای شما نمایش داده شود:
همان طور که در تصویر بالا می بینید، دو متد در وب سرویس ما وجود دارد. بر روی یکی از متدها (مثلا Sum) کلیک کنید. با این کار، تصویر زیر برای شما نمایش داده خواهد شد.
در تصویر بالا، مشاهده می کنیم که همه جزئیات ایجاد یک درخواست SOAP و همچنین مقادیر پارامتر مورد نیاز برای invoke کردن HttpWebRequest ها نشان داده شده اند . بنابراین، بیایید مرور کوتاهی بر این پارامترها انجام بدهیم.
HTTP Method : بیان کننده نوع درخواست HTTP است که می خواهید از سرویس ، درخواست کنید. مانند GET , POST ,PUT و یا delete.
Host : آدرس مکانی که سرویس بر روی آن host شده است را نشان می دهد. که در این مقاله localhost است. به عنوان مثال : http://localhost/Employee.asmx
Content-Type : بیان کننده نوع درخواستی است که شما از سرویس انجام می دهید ، مانند XML و یا json.که در این مقاله text/xml است.
Content-Length : بیان کننده طول بدنه request شما است .
SOAPAction : این پارامتر، یک صفت بسیار مهم برای شناسایی web method و فراخوانی آن از چندین web method است.
SOAP Body : بدنه درخواست و پاسخ را مشخص می کند.
امیدواریم که با این توضیحات، پارامترها برای شما آسان تر شده باشند.
گام دوم: یک برنامه Console ایجاد کنید تا وب سرویس را از طریق آن فراخوانی کنید.
1-به آدرس "Start", "All Programsبروید و "Microsoft Visual Studio 2015" را باز کنید.
2-بر روی "File", "New", و سپس "Project..." کلیک کرده و یک برنامه Console باز کنید.
3-یک نام برای پروژه انتخاب کنید و مکان ذخیره سازی آن را نیز مطابق با دلخواه خودتان تغییر بدهید.
حالا فایل Program.cs را باز کنید و متد زیر را برای ایجاد HttpWebRequest بنویسید:
public HttpWebRequest CreateSOAPWebRequest() { //Making Web Request HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(@"http://localhost/Employee.asmx"); //SOAPAction Req.Headers.Add(@"SOAPAction:http://tempuri.org/Addition"); //Content_type Req.ContentType = "text/xml;charset=\"utf-8\""; Req.Accept = "text/xml"; //HTTP method Req.Method = "POST"; //return HttpWebRequest return Req; }
حالا یک متد برای invoke کردن وب سرویس با استفاده از بدنه پاسخ SOAP ایجاد می کنیم.
public void InvokeService(int a, int b) { //Calling CreateSOAPWebRequest method HttpWebRequest request = CreateSOAPWebRequest(); XmlDocument SOAPReqBody = new XmlDocument(); //SOAP Body Request SOAPReqBody.LoadXml(@ "<?xml version=" "1.0" " encoding=" "utf-8" "?> < soap: Envelope xmlns: soap = "" http: //schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> < soap: Body > < Addition xmlns = "" http: //tempuri.org/""> < a > " + a + @" < /a> < b > " + b + @" < /b> < /Addition> < /soap:Body> < /soap:Envelope>"); using(Stream stream = request.GetRequestStream()) { SOAPReqBody.Save(stream); } //Geting response from request using(WebResponse Serviceres = request.GetResponse()) { using(StreamReader rd = new StreamReader(Serviceres.GetResponseStream())) { //reading stream var ServiceResult = rd.ReadToEnd(); //writting stream result on console Console.WriteLine(ServiceResult); Console.ReadLine(); } } } حالا متد بالا را از متد اصلی درون برنامه به روش زیر فراخوانی کنید. static void Main(string[] args) { //creating object of program class to access methods Program obj = new Program(); Console.WriteLine("Please Enter Input values.."); //Reading input values from console int a = Convert.ToInt32(Console.ReadLine()); int b = Convert.ToInt32(Console.ReadLine()); //Calling InvokeService method obj.InvokeService(a, b); }
حالا همه کدهایی که در داخل فایل Program.cs هستند مانند زیر خواهند بود:
using System; using System.IO; using System.Net; using System.Xml; namespace UsingSOAPRequest { public class Program { static void Main(string[] args) { //creating object of program class to access methods Program obj = new Program(); Console.WriteLine("Please Enter Input values.."); //Reading input values from console int a = Convert.ToInt32(Console.ReadLine()); int b = Convert.ToInt32(Console.ReadLine()); //Calling InvokeService method obj.InvokeService(a, b); } public void InvokeService(int a, int b) { //Calling CreateSOAPWebRequest method HttpWebRequest request = CreateSOAPWebRequest(); XmlDocument SOAPReqBody = new XmlDocument(); //SOAP Body Request SOAPReqBody.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?> <soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema- instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> <soap:Body> <Addition xmlns=""http://tempuri.org/""> <a>" + a + @"</a> <b>" + b + @"</b> </Addition> </soap:Body> </soap:Envelope>"); using (Stream stream = request.GetRequestStream()) { SOAPReqBody.Save(stream); } //Geting response from request using (WebResponse Serviceres = request.GetResponse()) { using (StreamReader rd = new StreamReader(Serviceres.GetResponseStream())) { //reading stream var ServiceResult = rd.ReadToEnd(); //writting stream result on console Console.WriteLine(ServiceResult); Console.ReadLine(); } } } public HttpWebRequest CreateSOAPWebRequest() { //Making Web Request HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(@"http://localhost/Employee.asmx"); //SOAPAction Req.Headers.Add(@"SOAPAction:http://tempuri.org/Addition"); //Content_type Req.ContentType = "text/xml;charset=\"utf-8\""; Req.Accept = "text/xml"; //HTTP method Req.Method = "POST"; //return HttpWebRequest return Req; } } }
خروجی نهایی به صورت زیر خواهد بود:
- C#.net
- 13k بازدید
- 3 تشکر