در این آموزش قصد دارم مراحل ساخت و تست وب سرویس soap را در c++ با gsoap با یک مثال ساده به شما آموزش بدم.کاری که قصد دارم انجام بدم به این صورته ، که وب سرویس یک متد getData داره که یک شماره فایل را از کاربر دریافت می کنه و سپس با توجه به شماره فایل موردنظر را در یک وکتور به صورت باینری بارگذاری می کنه و به کاربر ارسال می کنه.
با من مراحل زیر را دنبال کنید:
1- قبل از هر کاری باید gsoap را نصب کنیم ازاین آدرس https://sourceforge.net/projects/gsoap2/files/ دانلود و سپس نصبش کنید.
2- هر وب سرویس soap از فایل wsdl جهت توصیف وب سرویس استفاده می کنه . فایل WSDL مخفف عبارت Web Services Description Language است. این یک زبان مبتنی بر XML است که برای توصیف قابلیتهای یک سرویس وب و تعریف نحوه دسترسی به آن استفاده میشود. فایل WSDL به طور معمول حاوی اطلاعاتی درباره سرویس وب است، مانند نام، رابط، عملیات، ورودیها، خروجیها و مکان سرویس وب.
هدف از فایل WSDL، فراهم کردن امکان دسترسی و استفاده آسان برای توسعهدهندگان به سرویس وب، بدون توجه به سکوی و زبان برنامهنویسی استفاده شده، است. با فراهم کردن توصیف استاندارد سرویس وب، فایل WSDL امکان تولید کدی را برای برقراری ارتباط با سرویس وب به صورت خودکار فراهم میکند، بدون نیاز به کدگذاری دستی پروتکل ارتباطی.
به طور خلاصه، فایل WSDL راه استاندارد شدهای برای توصیف سرویسهای وب فراهم میکند و باعث میشود توسعهدهندگان بتوانند به راحتی آنها را کشف، درک و استفاده کنند.
یک فایل جدید با نام image_service.wsdl با محتوای زیر را ایجاد کنید:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org/ImageService/"
targetNamespace="http://www.example.org/ImageService/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/ImageService/">
<xsd:element name="getData">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="index" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getDataResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="result" type="xsd:base64Binary"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="GetDataRequest">
<wsdl:part name="parameters" element="tns:getData"/>
</wsdl:message>
<wsdl:message name="GetDataResponse">
<wsdl:part name="parameters" element="tns:getDataResponse"/>
</wsdl:message>
<wsdl:portType name="ImageService">
<wsdl:operation name="getData">
<wsdl:input message="tns:GetDataRequest"/>
<wsdl:output message="tns:GetDataResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ImageServiceSOAP" type="tns:ImageService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getData">
<soap:operation soapAction="http://www.example.org/ImageService/getData"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ImageService">
<wsdl:port name="ImageServiceSOAP" binding="tns:ImageServiceSOAP">
<soap:address location="http://localhost:8080/ImageService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
در اینجا قصد دارم بخش های مختلف یک فایل wsdl را برای شما توضیح بدم. یک فایل WSDL میتواند به اجزای زیر تقسیم شود:
این فایل WSDL را میتوان به بخشهای زیر تقسیم کرد:
1. تعریف XML: این تعریف استاندارد XML است که نسخه و رمزگذاری سند XML را مشخص میکند.
2. تعاریف: این عنصر ریشه سند WSDL است و شامل فضای نام هدف سرویس وب می باشد. ویژگی "targetNamespace" فضای نام مورد استفاده در سند WSDL و URI را که سرویس وب را شناسایی می کند، مشخص می کند.
3. انواع: این عنصر انواع دادهای استفاده شده در سرویس وب را تعریف میکند. در این مثال، عنصر `types` حاوی یک تعریف طرح XML (XSD) است که عناصر `getData` و `getDataResponse` را تعریف میکند.
4. پیام: این عنصر فرمت پیامهای ورودی و خروجی را برای هر عملیات در سرویس وب تعریف میکند. ویژگی `name` نام پیام را مشخص میکند و عنصر `part` عنصر پیام را مشخص میکند.
5. نوعپورت: این عنصر رابط انتزاعی سرویس وب را تعریف میکند. ویژگی `name` نام نوع پورت را مشخص میکند و عنصر `operation` عملیاتی را تعریف میکند که بر روی سرویس وب قابل انجام است.
6. بایندینگ: این عنصر پروتکل و فرمت دادهای واقعی استفاده شده برای ارتباط با سرویس وب را تعریف میکند. ویژگی `name` نام بایندینگ را مشخص میکند و ویژگی `type` نوع پورت مرتبط با این بایندینگ را مشخص میکند. در این مثال، عنصر `binding` با نوع پورت `ImageService` مرتبط است.
7. سرویس: این عنصر نقطه پایانی سرویس وب را تعریف میکند. ویژگی `name` نام سرویس را مشخص میکند و عنصر `port` آدرس نقطه پایانی و بایندینگ سرویس وب را مشخص میکند. ویژگی `address` آدرس URL نقطه پایانی را مشخص میکند. در این مثال، آدرس URL نقطه پایانی `http://localhost:8080/ImageService` است.
در کل، این فایل WSDL یک سرویس وب به نام `ImageService` را تعریف میکند که یک عملیات به نام `getData` ارائه میدهد. عملیات `getData` یک پارامتر ورودی به نام `index` را میگیرد و یک پاسخ بلاب به نام `result` را برمیگرداند. سرویس وب از پروتکل SOAP و پروتکل انتقال HTTP استفاده میکند. آدرس URL نقطه پایانی برای سرویس وب `http://localhost:8080/ImageService` است.