xamfia
شنبه 01 فروردین 1388, 15:35 عصر
در ادامه بحث مقدماتی که درباره سرویس های وب داشتم در این پست به سراغ WSDL می رویم .
یکی از سوالاتی که در پست قبلی مطرح کردم این بود که چگونه می توان برای استفاده از یک سرویس از چگونگی کنش و واکنش های آن آگاهی پیدا کرد؟؟
به عبارتی دیگر زمانی که شما می خواهید متد خاصی را فراخوانی کنید باید بدانید چه پارامترهایی از چه نوعی دریافت می کند و همچنین مقدار برگشتی اش چه می باشد؟ و یا شاید اصلا بخواهید توضیحاتی در مورد اینکه یک متد چکار خاصی را برای شما انجام میدهد را بدانید و ... راه چاره WSDL است.
WSDL(web service description language) همان طور که از نامش پیداست زبان و استانداردی برای تشریح یک سرویس است.
@ این زبان با فرمت XML است و برای تشریح یک وب سرویس که چگونه فراخوانی می شود و چه پارامترهایی می گیرد، استفاده می شود. WSDL از پنج قسمت به شرح زیر تشکیل شده است :
1) بخش <types> : در این بخش تمام گونه های داده ای که توسط سرویس مورد استفاده قرار می گیرد، تعریف می شود.
2) بخش <message>: پارامترهای ورودی و خروجی سرویس در این بخش تعریف می شوند.
3) بخش<portType>: روشهای دسترسی به پیغامهایی که در بخش پیش تعریف شده اند در این بخش قرار می گیرند. [این تگ از مهترین اجزا WSDL میباشد. در واقع این تگ نقش دروازه ورود به یک سرویس را بازی میکند.همان طور که شاید تا به حال حدس زده باشید در سرویس ها ما چیزی شبیه تابع Main در برنامه های قدیمی نداریم.در واقع این تگ برای ما تقریبا همان نقش را بازی میکند، یعنی به ما میگوید که از کجا شروع کنیم]
4) بخش<bindings>: پروتکلهایی که مورد استفاده قرار می گیرد (HTTP GET, HTTP POST, SOAP) در این بخش قرار می گیرد.
5) بخش<service> : تمام بخشهای ذکر شده تا اینجا، در این قسمت به هم متصل می شوند.
http://www.oracle.com/technology/sample_code/tutorials/fbs/images/wsdlstruct.jpg
( از@ تا اینجا از نوشته های مجید اطلس باف (http://radcom.ir/weblog/majid/) نیز بهره گرفته ام- قابل توجه کسانی که اخلاق علمی را رعایت نمی کنند!!)
ترجیح میدهم به جای تعاریف قلمبه سلمبه(!) که معمولا ما برنامه نویسان از آن متنفریم ، برویم به سراغ یک مثال سادهاز سایت آموزشی W3C در آدرس http://www.w3schools.com/webservices/tempconvert.asmx
در این مثال ما یک کلاس با کد زیر داریم :
<%@ WebService Language="VBScript" Class="TempConvert" %>
Imports System
Imports System.Web.Services
Public Class TempConvert :Inherits WebService
<WebMethod()> Public Function FahrenheitToCelsius
(ByVal Fahrenheit As String) As String
dim fahr
fahr=trim(replace(Fahrenheit,",","."))
if fahr="" or IsNumeric(fahr)=false then return "Error"
return ((((fahr) - 32) / 9) * 5)
end function
<WebMethod()> Public Function CelsiusToFahrenheit
(ByVal Celsius As String) As String
dim cel
cel=trim(replace(Celsius,",","."))
if cel="" or IsNumeric(cel)=false then return "Error"
return ((((cel) * 9) / 5) + 32)
end function
end class
فعلا نیازی به تفسیر کد بالا نیست پس خودتان را زیاد درگیر درک آن نکنید (در پست های آینده به تفسیر در مورد کد نویسی webservice بحث خواهم کرد) فقط در همین حد بدانید که این کلاس دو متد دارد برای تبدیل فارنهایت به سلسیوس و بلعکس.
در آدرس زیر می توانید این دو تابع را تست کنید و لذت ببرید!
http://www.w3schools.com/webservices/tempconvert.asmx (http://www.w3schools.com/webservices/tempconvert.asmx)
حال به سراغ بحث خودمان پیرامون WSDL برمیگردیم ، اگر شما سری به آدرس زیر بزنید میتوانید WSDL مربوط به کلاس بالا را مشاهده کنید:
http://www.w3schools.com/webservices/tempconvert.asmx?wsdl (http://www.w3schools.com/webservices/tempconvert.asmx?wsdl)
جالب بود نه؟!!
<s:element name="FahrenheitToCelsius">
<s:complexType>
<s:sequence>
@
<s:element minOccurs="0" maxOccurs="1" name="Fahrenheit" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
@@
<s:element name="FahrenheitToCelsiusResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="FahrenheitToCelsiusResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
احتمالا در همین برخورد اول شما خودتان به رابطه های بسیاری برخوردید و شاید متوجه شده اید که WSDL چگونه می تواند با تگ های خود ویژگی های یک متد را ار قبیل تعداد و نوع پارامتر های ورودی ،نوع برگشتی تابع، توضیحات اضافی هر تابع و ... را شرح دهد.
در خط @ به بعد شما پارامتر ورودی تابع را ملاحظه میفرمائید که نامش Fahrenheitاست و نوع آن نیز String می باشد.
در خط @@ به بعد WSDL شرح مقدار برگشتی متد FahrenheitToCelsiusرا به ما می دهد که ناگفته پیداست که مقدار برگشتی متد(تابع) از نوع String می باشد.
http://www.wsper.org/wsdl20.png
در شکل بالا می توانید نمای کلی فرایند یک WSDL را ببینید و با چگونگی عملکرد کلی آشناتر شوید.
برای اطلاعات بیشتر میتوانید ار لینک زیر استفاده کنید
http://www.w3.org/TR/wsdl20 (http://www.w3.org/TR/wsdl20)
با تشکر
میثم نوایی
http://www.xamfia.com/about.aspx
یکی از سوالاتی که در پست قبلی مطرح کردم این بود که چگونه می توان برای استفاده از یک سرویس از چگونگی کنش و واکنش های آن آگاهی پیدا کرد؟؟
به عبارتی دیگر زمانی که شما می خواهید متد خاصی را فراخوانی کنید باید بدانید چه پارامترهایی از چه نوعی دریافت می کند و همچنین مقدار برگشتی اش چه می باشد؟ و یا شاید اصلا بخواهید توضیحاتی در مورد اینکه یک متد چکار خاصی را برای شما انجام میدهد را بدانید و ... راه چاره WSDL است.
WSDL(web service description language) همان طور که از نامش پیداست زبان و استانداردی برای تشریح یک سرویس است.
@ این زبان با فرمت XML است و برای تشریح یک وب سرویس که چگونه فراخوانی می شود و چه پارامترهایی می گیرد، استفاده می شود. WSDL از پنج قسمت به شرح زیر تشکیل شده است :
1) بخش <types> : در این بخش تمام گونه های داده ای که توسط سرویس مورد استفاده قرار می گیرد، تعریف می شود.
2) بخش <message>: پارامترهای ورودی و خروجی سرویس در این بخش تعریف می شوند.
3) بخش<portType>: روشهای دسترسی به پیغامهایی که در بخش پیش تعریف شده اند در این بخش قرار می گیرند. [این تگ از مهترین اجزا WSDL میباشد. در واقع این تگ نقش دروازه ورود به یک سرویس را بازی میکند.همان طور که شاید تا به حال حدس زده باشید در سرویس ها ما چیزی شبیه تابع Main در برنامه های قدیمی نداریم.در واقع این تگ برای ما تقریبا همان نقش را بازی میکند، یعنی به ما میگوید که از کجا شروع کنیم]
4) بخش<bindings>: پروتکلهایی که مورد استفاده قرار می گیرد (HTTP GET, HTTP POST, SOAP) در این بخش قرار می گیرد.
5) بخش<service> : تمام بخشهای ذکر شده تا اینجا، در این قسمت به هم متصل می شوند.
http://www.oracle.com/technology/sample_code/tutorials/fbs/images/wsdlstruct.jpg
( از@ تا اینجا از نوشته های مجید اطلس باف (http://radcom.ir/weblog/majid/) نیز بهره گرفته ام- قابل توجه کسانی که اخلاق علمی را رعایت نمی کنند!!)
ترجیح میدهم به جای تعاریف قلمبه سلمبه(!) که معمولا ما برنامه نویسان از آن متنفریم ، برویم به سراغ یک مثال سادهاز سایت آموزشی W3C در آدرس http://www.w3schools.com/webservices/tempconvert.asmx
در این مثال ما یک کلاس با کد زیر داریم :
<%@ WebService Language="VBScript" Class="TempConvert" %>
Imports System
Imports System.Web.Services
Public Class TempConvert :Inherits WebService
<WebMethod()> Public Function FahrenheitToCelsius
(ByVal Fahrenheit As String) As String
dim fahr
fahr=trim(replace(Fahrenheit,",","."))
if fahr="" or IsNumeric(fahr)=false then return "Error"
return ((((fahr) - 32) / 9) * 5)
end function
<WebMethod()> Public Function CelsiusToFahrenheit
(ByVal Celsius As String) As String
dim cel
cel=trim(replace(Celsius,",","."))
if cel="" or IsNumeric(cel)=false then return "Error"
return ((((cel) * 9) / 5) + 32)
end function
end class
فعلا نیازی به تفسیر کد بالا نیست پس خودتان را زیاد درگیر درک آن نکنید (در پست های آینده به تفسیر در مورد کد نویسی webservice بحث خواهم کرد) فقط در همین حد بدانید که این کلاس دو متد دارد برای تبدیل فارنهایت به سلسیوس و بلعکس.
در آدرس زیر می توانید این دو تابع را تست کنید و لذت ببرید!
http://www.w3schools.com/webservices/tempconvert.asmx (http://www.w3schools.com/webservices/tempconvert.asmx)
حال به سراغ بحث خودمان پیرامون WSDL برمیگردیم ، اگر شما سری به آدرس زیر بزنید میتوانید WSDL مربوط به کلاس بالا را مشاهده کنید:
http://www.w3schools.com/webservices/tempconvert.asmx?wsdl (http://www.w3schools.com/webservices/tempconvert.asmx?wsdl)
جالب بود نه؟!!
<s:element name="FahrenheitToCelsius">
<s:complexType>
<s:sequence>
@
<s:element minOccurs="0" maxOccurs="1" name="Fahrenheit" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
@@
<s:element name="FahrenheitToCelsiusResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="FahrenheitToCelsiusResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
احتمالا در همین برخورد اول شما خودتان به رابطه های بسیاری برخوردید و شاید متوجه شده اید که WSDL چگونه می تواند با تگ های خود ویژگی های یک متد را ار قبیل تعداد و نوع پارامتر های ورودی ،نوع برگشتی تابع، توضیحات اضافی هر تابع و ... را شرح دهد.
در خط @ به بعد شما پارامتر ورودی تابع را ملاحظه میفرمائید که نامش Fahrenheitاست و نوع آن نیز String می باشد.
در خط @@ به بعد WSDL شرح مقدار برگشتی متد FahrenheitToCelsiusرا به ما می دهد که ناگفته پیداست که مقدار برگشتی متد(تابع) از نوع String می باشد.
http://www.wsper.org/wsdl20.png
در شکل بالا می توانید نمای کلی فرایند یک WSDL را ببینید و با چگونگی عملکرد کلی آشناتر شوید.
برای اطلاعات بیشتر میتوانید ار لینک زیر استفاده کنید
http://www.w3.org/TR/wsdl20 (http://www.w3.org/TR/wsdl20)
با تشکر
میثم نوایی
http://www.xamfia.com/about.aspx