چکیده

  • 2021-12-5

SOAP یک پروتکل سبک برای تبادل اطلاعات در یک محیط غیرمتمرکز و توزیع شده است. این یک پروتکل مبتنی بر XML است که از سه بخش تشکیل شده است: پاکت نامه ای که چارچوبی را برای توصیف آنچه در یک پیام و نحوه پردازش آن تعریف می کند ، مجموعه ای از قوانین رمزگذاری برای بیان نمونه های داده های تعریف شده از برنامه و یک کنوانسیون برای نمایندگی است. تماس ها و پاسخ های روش از راه دور. از صابون به طور بالقوه می توان در ترکیب با انواع پروتکل های دیگر استفاده کرد. با این حال ، تنها اتصالات تعریف شده در این سند نحوه استفاده از صابون در ترکیب با چارچوب پسوند HTTP و HTTP را توصیف می کند.

وضعیت

این سند یک ارسال به کنسرسیوم وب جهانی است (به درخواست ارسال ، نظر کارمندان W3C مراجعه کنید) برای پیشنهاد تشکیل یک کارگروه در حوزه پروتکل های مبتنی بر XML. نظرات به نویسندگان خوش آمدید ، اما شما تشویق می شوید که نظرات خود را در لیست پستی عمومی W3C به اشتراک بگذارید (به بایگانی مراجعه کنید).

این سند یادداشتی است که فقط توسط W3C برای بحث در دسترس است. انتشار این یادداشت توسط W3C نشانگر تأیید W3C یا تیم W3C یا اعضای W3C نیست. W3C هیچ کنترل سرمقاله ای در تهیه این یادداشت نداشته است. این سند اثری در حال انجام است و ممکن است در هر زمان توسط سایر اسناد منسوخ شود ، جایگزین یا منسوخ شود.

لیستی از اسناد فنی فعلی W3C را می توان در صفحه گزارش های فنی یافت.

فهرست مطالب

1. مقدمه

SOAP یک مکانیسم ساده و سبک برای تبادل اطلاعات ساختاری و تایپ شده بین همسالان در یک محیط غیرمتمرکز و توزیع شده با استفاده از XML فراهم می کند. SOAP به خودی خود هیچ معنایی برنامه ای مانند مدل برنامه نویسی یا معناشناسی خاص پیاده سازی را تعریف نمی کند. در عوض ، یک مکانیسم ساده برای بیان معانی برنامه با ارائه یک مدل بسته بندی مدولار و مکانیسم های رمزگذاری برای رمزگذاری داده ها در ماژول ها تعریف می کند. این اجازه می دهد تا از صابون در انواع زیادی از سیستم ها اعم از سیستم های پیام رسانی گرفته تا RPC استفاده شود.

صابون از سه بخش تشکیل شده است:

  • پاکت صابون (بخش 4 را ببینید) ساختار یک چارچوب کلی برای بیان آنچه در یک پیام است تعریف می کند. چه کسی باید با آن مقابله کند ، و آیا اختیاری یا اجباری است.
  • قوانین رمزگذاری SOAP (بخش 5 را ببینید) یک مکانیسم سریال سازی را تعریف می کند که می تواند برای تبادل نمونه های داده های تعریف شده از برنامه استفاده شود.
  • نمایندگی SOAP RPC (بخش 7 را ببینید) یک کنوانسیون را تعریف می کند که می تواند برای نشان دادن تماس ها و پاسخ های روش از راه دور استفاده شود.

اگرچه این قسمت ها با هم به عنوان بخشی از صابون توصیف می شوند ، اما از نظر عملکردی متعامد هستند. به طور خاص ، پاکت و قوانین رمزگذاری در نام های مختلف به منظور ارتقاء سادگی از طریق مدولار تعریف می شوند.

علاوه بر پاکت SOAP ، قوانین رمزگذاری SOAP و کنوانسیون های SOAP RPC ، این مشخصات دو اتصال پروتکل را تعریف می کند که توصیف می کند که چگونه می توان پیام SOAP را در پیام های HTTP [5] با یا بدون چارچوب پسوند HTTP حمل کرد [6].

1. 1 اهداف طراحی

هدف اصلی طراحی برای SOAP سادگی و قابلیت گسترش است. این بدان معنی است که چندین ویژگی از سیستم های پیام رسانی سنتی و سیستم های شیء توزیع شده وجود دارد که جزئی از مشخصات صابون اصلی نیستند. چنین ویژگی هایی شامل می شود

  • مجموعه زباله های توزیع شده
  • جعبه یا دسته پیام ها
  • اشیاء به صورت مرجع (که به جمع آوری زباله های توزیع شده نیاز دارد)
  • فعال سازی (که به اشیاء به مرجع نیاز دارد)

1. 2 کنوانسیون های یادداشت

کلمات کلیدی "باید" ، "نباید" ، "مورد نیاز" ، "باید" ، "نباید" ، "باید" ، "نباید" ، "توصیه شده" ، "ممکن است" و "اختیاری" در این سندهمانطور که در RFC-2119 شرح داده می شود تفسیر می شود [2].

پیشوندهای فضای نام "صابون-ENV" و "صابون" مورد استفاده در این سند با سایت های صابون "http://schemas. xmlsoap. org/soap/envelope/" و "http: //schemas. xmlsoap" همراه است. به ترتیب org/صابون/رمزگذاری/".

در طول این سند ، پیشوند فضای نام "XSI" فرض می شود که با URI "http://www. w3. org/1999/xmlschema-instance" همراه است که در مشخصات طرح های XML تعریف شده است [11]. به طور مشابه ، پیشوند فضای نام "XSD" فرض می شود که با URI "http://www. w3. org/1999/xmlschema" همراه است که در [10] تعریف شده است. پیشوند فضای نام "TNS" برای نشان دادن هر نوع نام هدف از سند فعلی استفاده می شود. تمام پیشوندهای فضای نام دیگر فقط نمونه هستند.

فضای نام از شکل کلی "برخی از URI" بیانگر برخی از URI وابسته به برنامه یا وابسته به متن است [4].

این مشخصات از فرم افزوده Backus-Naur (BNF) استفاده می کند ، همانطور که در RFC-2616 [5] برای سازه های خاص شرح داده شده است.

1. 3 نمونه پیام های SOAP

در این مثال، یک درخواست SOAP GetLastTradePrice به یک سرویس StockQuote ارسال می شود. این درخواست یک پارامتر رشته، نماد ticker را می گیرد و یک شناور در پاسخ SOAP برمی گرداند. عنصر SOAP Envelope عنصر بالای سند XML است که پیام SOAP را نشان می دهد. فضاهای نام XML برای رفع ابهام شناسه های SOAP از شناسه های خاص برنامه استفاده می شود. این مثال پیوندهای HTTP تعریف شده در بخش 6 را نشان می‌دهد. شایان ذکر است که قوانین حاکم بر قالب بارگذاری XML در SOAP کاملاً مستقل از این واقعیت است که بار در HTTP حمل می‌شود.

نمونه های بیشتری در پیوست A موجود است.

مثال 1 پیام SOAP در درخواست HTTP جاسازی شده است

POST /StockQuote HTTP/1. 1 میزبان: www. stockquoteserver. com نوع محتوا: text/xml; charset="utf-8" Content-Length: nnnn SOAPAction: "Some-URI"

در زیر پیام پاسخ حاوی پیام HTTP با پیام SOAP به عنوان محموله است:

مثال 2 پیام SOAP تعبیه شده در پاسخ HTTP

HTTP/1. 1 200 OK نوع محتوا: text/xml; charset="utf-8" طول محتوا: nnnn

2. مدل تبادل پیام SOAP

پیام های SOAP اساساً انتقال یک طرفه از فرستنده به گیرنده هستند، اما همانطور که در بالا نشان داده شد، پیام های SOAP اغلب برای اجرای الگوهایی مانند درخواست/پاسخ ترکیب می شوند.

پیاده سازی SOAP را می توان برای بهره برداری از ویژگی های منحصر به فرد سیستم های شبکه خاص بهینه کرد. به عنوان مثال، اتصال HTTP شرح داده شده در بخش 6، پیام های پاسخ SOAP را به عنوان پاسخ های HTTP، با استفاده از همان اتصال درخواست ورودی، تحویل می دهد.

صرف نظر از پروتکلی که SOAP به آن متصل است، پیام ها در امتداد یک مسیر به اصطلاح "پیام" هدایت می شوند که امکان پردازش در یک یا چند گره میانی را علاوه بر مقصد نهایی فراهم می کند.

یک برنامه SOAP که پیام SOAP را دریافت می کند، باید آن پیام را با انجام اقدامات زیر به ترتیب ذکر شده در زیر پردازش کند:

    تمام قسمت های پیام SOAP را که برای آن برنامه در نظر گرفته شده است شناسایی کنید (به بخش 4. 2. 2 مراجعه کنید)
  1. بررسی کنید که تمام قسمت‌های اجباری شناسایی‌شده در مرحله 1 توسط برنامه برای این پیام پشتیبانی می‌شوند (به بخش 4. 2. 3 مراجعه کنید) و آنها را مطابق با آن پردازش کنید. اگر اینطور نیست، پیام را کنار بگذارید (به بخش 4. 4 مراجعه کنید). پردازنده ممکن است بخش‌های اختیاری شناسایی‌شده در مرحله 1 را بدون تأثیر بر نتیجه پردازش نادیده بگیرد.
  2. اگر برنامه SOAP مقصد نهایی پیام نیست، قبل از فوروارد کردن پیام، تمام قسمت های مشخص شده در مرحله 1 را حذف کنید.

پردازش یک پیام یا بخشی از یک پیام مستلزم آن است که پردازشگر SOAP، از جمله، الگوی تبادل مورد استفاده (یک طرفه، درخواست/پاسخ، چندپخشی، و غیره)، نقش گیرنده در آن الگو، استخدام را درک کند.(در صورت وجود) مکانیسم های RPC مانند آنچه در بخش 7 مستند شده است، نمایش یا رمزگذاری داده ها، و همچنین سایر معنایی های لازم برای پردازش صحیح.

در حالی که ویژگی هایی مانند ویژگی SOAP encodingStyle (به بخش 4. 1. 1 مراجعه کنید) را می توان برای توصیف جنبه های خاصی از یک پیام استفاده کرد، این مشخصات ابزار خاصی را الزامی نمی کند که گیرنده به طور کلی چنین تصمیماتی را انجام دهد. برای مثال، برخی از برنامه‌های کاربردی متوجه خواهند شد که یک عنصر خاص با استفاده از قراردادهای بخش 7، یک درخواست RPC را سیگنال می‌دهد، در حالی که برنامه دیگری ممکن است استنباط کند که تمام ترافیک هدایت‌شده به آن به‌عنوان پیام‌های یک طرفه کدگذاری می‌شود.

3. ارتباط با XML

همه پیام‌های SOAP با استفاده از XML کدگذاری می‌شوند (برای اطلاعات بیشتر در مورد XML به [7] مراجعه کنید).

یک برنامه SOAP باید فضای نام SOAP مناسب را در تمام عناصر و ویژگی های تعریف شده توسط SOAP در پیام هایی که تولید می کند، داشته باشد. یک برنامه SOAP باید بتواند فضاهای نام SOAP را در پیام هایی که دریافت می کند پردازش کند. باید پیام‌هایی را که دارای فضای نام نادرست هستند دور بیندازد (به بخش 4. 4 مراجعه کنید) و ممکن است پیام‌های SOAP را بدون فضای نام SOAP پردازش کند که گویی فضای نام SOAP صحیحی دارند.

SOAP دو فضای نام را تعریف می کند (برای اطلاعات بیشتر در مورد فضای نام XML به [8] مراجعه کنید):

  • پاکت SOAP دارای شناسه فضای نام "http://schemas. xmlsoap. org/soap/envelope/" است.
  • سریال سازی SOAP دارای شناسه فضای نام "http://schemas. xmlsoap. org/soap/encoding/" است.

پیام SOAP نباید حاوی اعلامیه نوع سند باشد. پیام SOAP نباید حاوی دستورالعمل های پردازش باشد.[7]

SOAP از ویژگی محلی و غیرقابل صلاحیت "id" نوع "ID" برای تعیین شناسه منحصر به فرد یک عنصر رمزگذاری شده استفاده می کند. SOAP از ویژگی محلی و غیرقابل صلاحیت "href" از نوع "uri-reference" برای تعیین ارجاع به آن مقدار، به روشی مطابق با مشخصات XML [7]، مشخصات طرحواره XML [11]، و مشخصات زبان پیوند XML استفاده می کند. 9].

به استثنای ویژگی SOAP mustUnderstand (به بخش 4. 2. 3 مراجعه کنید) و ویژگی SOAP actor (به بخش 4. 2. 2 مراجعه کنید)، به طور کلی مجاز است که ویژگی ها و مقادیر آنها در نمونه های XML یا به طور متناوب در طرحواره ها با تأثیر یکسان ظاهر شوند.. یعنی اعلان در یک DTD یا طرحواره با مقدار پیش فرض یا ثابت از نظر معنایی معادل ظاهر در یک نمونه است.

4. پاکت صابون

پیام SOAP یک سند XML است که از یک پاکت اجباری SOAP، یک سرصفحه SOAP اختیاری و یک بدنه اجباری SOAP تشکیل شده است. این سند XML به عنوان یک پیام SOAP برای بقیه این مشخصات نامیده می شود. شناسه فضای نام برای عناصر و ویژگی های تعریف شده در این بخش "http://schemas. xmlsoap. org/soap/envelope/" است. یک پیام SOAP شامل موارد زیر است:

  • Envelope عنصر بالای سند XML است که پیام را نشان می دهد.
  • Header یک مکانیسم عمومی برای افزودن ویژگی‌ها به پیام SOAP به صورت غیرمتمرکز بدون توافق قبلی بین طرف‌های ارتباط است. SOAP چند ویژگی را تعریف می کند که می تواند برای نشان دادن اینکه چه کسی باید با یک ویژگی سر و کار داشته باشد و اختیاری یا اجباری بودن آن استفاده شود (به بخش 4. 2 مراجعه کنید)
  • بدنه محفظه ای برای اطلاعات اجباری است که برای گیرنده نهایی پیام در نظر گرفته شده است (به بخش 4. 3 مراجعه کنید). SOAP یک عنصر را برای بدنه تعریف می کند که عنصر Fault است که برای گزارش دادن خطاها استفاده می شود.

قوانین گرامری به شرح زیر است:

  • پاكت نامه
    • نام عنصر "پاکت" است.
    • عنصر باید در پیام SOAP وجود داشته باشد
    • عنصر ممکن است حاوی اعلان فضای نام و همچنین ویژگی های اضافی باشد. در صورت وجود، چنین ویژگی های اضافی باید دارای فضای نام باشند. به طور مشابه، عنصر ممکن است حاوی عناصر فرعی اضافی باشد. در صورت وجود، این عناصر باید دارای فضای نام باشند و باید عنصر SOAP Body را دنبال کنند.
  • سربرگ (به بخش 4. 2 مراجعه کنید)
    • نام عنصر "Header" است.
    • عنصر ممکن است در یک پیام SOAP وجود داشته باشد. در صورت وجود، عنصر باید اولین عنصر فرزند فوری عنصر SOAP Envelope باشد.
    • عنصر ممکن است شامل مجموعه‌ای از ورودی‌های هدر باشد که هر کدام یک عنصر فرزند فوری عنصر SOAP Header هستند. همه عناصر فرزند فوری عنصر SOAP Header باید دارای فضای نام باشند.
  • بدن (به بخش 4. 3 مراجعه کنید)
    • نام عنصر "بدن" است.
    • این عنصر باید در یک پیام SOAP حضور داشته باشد و باید یک عنصر فوری کودک از یک عنصر پاکت صابون باشد. در صورت وجود باید مستقیماً عنصر هدر صابون را دنبال کنید. در غیر این صورت باید اولین عنصر فوری کودک عنصر پاکت صابون باشد.
    • این عنصر ممکن است حاوی مجموعه ای از مدخل های بدن باشد که هر یک عنصر فوری کودک از عنصر بدنه صابون هستند. عناصر فوری کودک عنصر بدن صابون ممکن است دارای فضای نامی باشد. SOAP عنصر گسل SOAP را تعریف می کند ، که برای نشان دادن پیام های خطا استفاده می شود (به بخش 4. 4 مراجعه کنید).
  • 4. 1. 1 ویژگی رمزگذاری صابون

    از ویژگی جهانی رمزگذاری SOAP می توان برای نشان دادن قوانین سریال سازی مورد استفاده در یک پیام SOAP استفاده کرد. این ویژگی ممکن است در هر عنصر ظاهر شود ، و به محتوای آن عنصر و همه عناصر کودک که خودشان حاوی چنین ویژگی هایی نیستند ، می پردازد ، به همان اندازه که یک اعلامیه فضای نام XML رواج دارد. هیچ رمزگذاری پیش فرض تعریف شده برای پیام صابون وجود ندارد.

    مقدار ویژگی یک لیست سفارش داده شده از یک یا چند URI است که قانون سریال سازی یا قوانینی را که می تواند برای رها کردن پیام صابون نشان داده شده به ترتیب خاص ترین و حداقل خاص استفاده شود ، شناسایی می کند. نمونه هایی از مقادیر هستند

    "http://schemas. xmlsoap. org/soap/encoding/" "http://my. host/encoding/restruct http://my. host/encoding/" ""

    قوانین سریال سازی تعریف شده توسط SOAP در بخش 5 توسط URI "http://schemas. xmlsoap. org/soap/encoding/" مشخص شده است. پیام ها با استفاده از این سریال سازی خاص باید این موضوع را با استفاده از ویژگی SOAP EcodingStyle نشان دهند. علاوه بر این ، تمام URIS به طور نحوی با "http://schemas. xmlsoap. org/soap/encoding/" شروع می شود و مطابق با قوانین رمزگذاری صابون تعریف شده در بخش 5 (هرچند با قوانین بالقوه محکم تر اضافه شده است).

    مقدار URI با طول صفر ("") به صراحت نشان می دهد که هیچ ادعایی برای سبک رمزگذاری عناصر موجود در آن صورت نمی گیرد. این می تواند برای خاموش کردن هرگونه ادعای حاوی عناصر استفاده شود.

    4. 1. 2 مدل نسخه پاکت نامه

    SOAP یک مدل نسخه سنتی را بر اساس شماره نسخه های اصلی و جزئی تعریف نمی کند. یک پیام SOAP باید یک عنصر پاکت نامه مرتبط با "http://schemas. xmlsoap. org/soap/envelope/" را داشته باشد. اگر پیامی توسط یک برنامه SOAP دریافت شود که در آن عنصر پاکت صابون با یک فضای نام متفاوت همراه باشد ، برنامه باید این را به عنوان یک خطای نسخه درمان کند و پیام را دور بیندازد. اگر پیام از طریق یک پروتکل درخواست/پاسخ مانند HTTP دریافت شود ، برنامه باید با استفاده از پیام SOAP MISSIMSMATCH FALLECODE پاسخ دهد (به بخش 4. 4 مراجعه کنید) با استفاده از صابون "http://schemas. xmlsoap. org/soap/envelope/" namespaceواد

    4. 2 هدر صابون

    SOAP مکانیسم انعطاف پذیر برای گسترش پیام به روشی غیرمتمرکز و مدولار و بدون اطلاع قبلی بین طرفین برقراری ارتباط فراهم می کند. نمونه های معمولی از پسوندهایی که می توانند به عنوان ورودی های هدر اجرا شوند ، احراز هویت ، مدیریت معاملات ، پرداخت و غیره هستند.

    عنصر هدر به عنوان اولین عنصر فوری کودک از عنصر XML پاکت صابون رمزگذاری شده است. تمام عناصر فوری کودک عنصر هدر به عنوان ورودی هدر نامیده می شوند.

    قوانین رمزگذاری برای ورودی های هدر به شرح زیر است:

  • ورود هدر با نام عناصر کاملاً واجد شرایط آن ، که از فضای نام URI و نام محلی تشکیل شده است ، مشخص می شود. تمام عناصر فوری کودک عنصر هدر صابون باید دارای فضای نامگذاری شده باشند.
  • ویژگی رمزگذاری SOAP ممکن است برای نشان دادن سبک رمزگذاری مورد استفاده برای ورودی های هدر استفاده شود (به بخش 4. 1. 1 مراجعه کنید).
  • ویژگی SOAP Mustunderstand (بخش 4. 2. 3 را ببینید) و ویژگی بازیگر صابون (به بخش 4. 2. 2 مراجعه کنید) ممکن است برای نشان دادن نحوه پردازش ورودی و توسط چه کسی استفاده شود (به بخش 4. 2. 1 مراجعه کنید).
  • 4. 2. 1 استفاده از ویژگی های هدر

    ویژگی های هدر صابون تعریف شده در این بخش تعیین می کند که چگونه یک گیرنده پیام SOAP باید پیام را مطابق با بخش 2 پردازش کند. یک برنامه SOAP که یک پیام SOAP ایجاد می کند فقط باید از ویژگی های هدر صابون در عناصر فوری کودک عنصر هدر صابون استفاده کند. گیرنده پیام SOAP باید تمام ویژگی های هدر صابون را که برای یک عنصر فوری کودک عنصر هدر صابون اعمال نمی شود ، نادیده بگیرد.

    به عنوان مثال ، یک هدر با شناسه عنصر "معامله" ، مقدار "Mustunderdand" از "1" و مقدار 5 است. این به شرح زیر رمزگذاری می شود:

    4. 2. 2 ویژگی بازیگر صابون

    یک پیام SOAP از مبدأ به مقصد نهایی سفر می کند ، به طور بالقوه با عبور از مجموعه ای از واسطه های صابون در طول مسیر پیام. یک واسطه صابون برنامه ای است که قادر به دریافت پیام های صابون و انتقال و ارسال است. هر دو واسطه و همچنین مقصد نهایی توسط URI مشخص می شوند.

    ممکن است تمام قسمت های یک پیام SOAP برای مقصد نهایی پیام SOAP در نظر گرفته شود ، اما در عوض ، ممکن است برای یک یا چند واسطه در مسیر پیام در نظر گرفته شود. نقش یک گیرنده یک عنصر هدر شبیه به پذیرش یک قرارداد است زیرا نمی توان آن را فراتر از گیرنده گسترش داد. یعنی یک گیرنده که یک عنصر هدر دریافت می کند ، نباید آن عنصر هدر را به برنامه بعدی در مسیر پیام صابون منتقل کند. گیرنده ممکن است یک عنصر هدر مشابه را وارد کند اما در این حالت ، قرارداد بین آن برنامه و گیرنده آن عنصر هدر است.

    ویژگی جهانی صابون بازیگر می تواند برای نشان دادن گیرنده یک عنصر هدر استفاده شود. مقدار ویژگی بازیگر صابون یک URI است. URI ویژه "http://schemas. xmlsoap. org/soap/actor/next" نشان می دهد که عنصر هدر برای اولین برنامه صابون که پیام را پردازش می کند در نظر گرفته شده است. این شبیه به مدل دامنه Hop-Hop است که توسط میدان هدر اتصال در HTTP نشان داده شده است.

    حذف ویژگی بازیگر صابون نشان می دهد که گیرنده مقصد نهایی پیام SOAP است.

    این ویژگی باید در نمونه پیام SOAP ظاهر شود تا مؤثر باشد (به بخش 3 و 4. 2. 1 مراجعه کنید).

    4. 2. 3 ویژگی SOAP Mustunderstand

    از ویژگی جهانی SOAP Mustunderstand می توان استفاده کرد تا نشان دهد آیا ورود هدر اجباری است یا اختیاری برای گیرنده پردازنده است. گیرنده ورود هدر توسط ویژگی بازیگر صابون تعریف می شود (به بخش 4. 2. 2 مراجعه کنید). مقدار ویژگی Mustunderstand یا "1" یا "0" است. عدم وجود ویژگی SOAP Mustunderstand از نظر معنایی معنایی با حضور آن با مقدار "0" است.

    اگر یک عنصر هدر با یک ویژگی SOAP Mustunderstand با مقدار "1" برچسب گذاری شود ، گیرنده آن ورود هدر یا باید از معناشناسی (همانطور که با نام کاملاً واجد شرایط عنصر منتقل می شود) پیروی کند و به درستی به آن معناشناسی پردازش شود ، یاباید پردازش پیام را شکست دهد (به بخش 4. 4 مراجعه کنید).

    ویژگی SOAP Mustunderstand امکان تکامل قوی را فراهم می کند. عناصری که با ویژگی SOAP Mustunderstand با مقدار "1" مشخص شده اند ، باید فرض شود که به نوعی معناشناسی عناصر والدین یا همسالان خود را تغییر دهد. برچسب زدن عناصر به این روش اطمینان می دهد که این تغییر در معناشناسی سکوت نخواهد شد (و احتمالاً اشتباه) توسط کسانی که ممکن است کاملاً آن را درک نکنند ، نادیده گرفته می شود.

    این ویژگی باید به عنوان مثال ظاهر شود تا مؤثر باشد (به بخش 3 و 4. 2. 1 مراجعه کنید).

    4. 3 بدن صابون

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

    عنصر بدن به عنوان یک عنصر فوری کودک از عنصر XML پاکت صابون رمزگذاری می شود. اگر یک عنصر هدر وجود داشته باشد ، عنصر بدن باید بلافاصله عنصر هدر را دنبال کند ، در غیر این صورت باید اولین عنصر فوری کودک عنصر پاکت باشد.

    تمام عناصر فوری کودک عنصر بدن به نام های بدن نامیده می شوند و هر ورودی بدن به عنوان یک عنصر مستقل در عنصر بدن صابون رمزگذاری می شود.

    قوانین رمزگذاری برای مدخل های بدن به شرح زیر است:

  • ورود بدنه با نام عناصر کاملاً واجد شرایط آن ، که از فضای نام URI و نام محلی تشکیل شده است ، مشخص می شود. عناصر فوری کودک عنصر بدن صابون ممکن است دارای فضای نامی باشد.
  • ویژگی رمزگذاری SOAP ممکن است برای نشان دادن سبک رمزگذاری مورد استفاده برای مدخل های بدنه استفاده شود (به بخش 4. 1. 1 مراجعه کنید).
  • SOAP یک ورودی بدنه را تعریف می کند ، که ورودی خطای مورد استفاده برای خطاهای گزارش است (به بخش 4. 4 مراجعه کنید).

    4. 3. 1 رابطه بین هدر صابون و بدن

    در حالی که هدر و بدن به عنوان عناصر مستقل تعریف می شوند ، در واقع آنها مرتبط هستند. رابطه بین ورود بدنه و ورود به عنوان به شرح زیر است: ورود بدنه از نظر معنایی معادل یک ورودی هدر در نظر گرفته شده برای بازیگر پیش فرض و با یک ویژگی SOAP Mustunderstand با مقدار "1" است. بازیگر پیش فرض با استفاده از ویژگی بازیگر نشان داده شده است (به بخش 4. 2. 2 مراجعه کنید).

    4. 4 گسل صابون

    عنصر گسل SOAP برای حمل اطلاعات خطا و/یا وضعیت در یک پیام SOAP استفاده می شود. در صورت وجود ، عنصر گسل SOAP باید به عنوان یک ورود بدن ظاهر شود و نباید بیش از یک بار در یک عنصر بدن ظاهر شود.

    عنصر گسل SOAP چهار زیرمجموعه زیر را تعریف می کند:

    FaultCode عنصر FaultCode برای استفاده توسط نرم افزار در نظر گرفته شده است تا مکانیسم الگوریتمی برای شناسایی گسل فراهم کند. FaultCode باید در یک عنصر گسل SOAP وجود داشته باشد و مقدار FaultCode باید یک نام واجد شرایط باشد همانطور که در [8] تعریف شده است. عنصر FaultString در نظر گرفته شده است برای ارائه توضیح قابل خواندن در مورد گسل و برای پردازش الگوریتمی در نظر گرفته نشده است. عنصر FaultString شبیه به "فرای" است که توسط HTTP تعریف شده است (به [5] ، بخش 6. 1 مراجعه کنید). این باید در یک عنصر گسل صابون وجود داشته باشد و حداقل باید اطلاعاتی را در مورد ماهیت گسل ارائه دهد. Filelactor عنصر خطاکار در نظر گرفته شده است تا اطلاعاتی را در مورد اینکه چه کسی باعث ایجاد گسل در مسیر پیام شده است ، ارائه دهد (به بخش 2 مراجعه کنید). این شبیه به ویژگی بازیگر صابون است (به بخش 4. 2. 2 مراجعه کنید) اما به جای نشان دادن مقصد ورودی هدر ، منبع گسل را نشان می دهد. مقدار ویژگی خطاکار ، URI است که منبع را مشخص می کند. برنامه هایی که به عنوان مقصد نهایی پیام SOAP عمل نمی کنند باید شامل عنصر خطاکار در یک عنصر گسل SOAP باشند. مقصد نهایی یک پیام ممکن است از عنصر خطاکار استفاده کند تا صریحاً نشان دهد که این گسل را ایجاد کرده است (همچنین به عنصر جزئیات زیر مراجعه کنید). جزئیات عنصر جزئیات برای حمل اطلاعات خطای خاص برنامه مربوط به عنصر بدن در نظر گرفته شده است. اگر محتوای عنصر بدن با موفقیت پردازش نشود ، باید حضور داشته باشد. نباید برای حمل اطلاعات در مورد اطلاعات خطا متعلق به ورودی های هدر استفاده شود. اطلاعات خطای دقیق متعلق به ورودی های هدر باید در ورودی های هدر حمل شود.

    عدم وجود عنصر جزئیات در عنصر گسل نشان می دهد که گسل مربوط به پردازش عنصر بدن نیست. این می تواند برای تشخیص اینکه آیا عنصر بدن در صورت وجود وضعیت گسل پردازش شده است یا خیر ، استفاده شود.

    تمام عناصر فوری کودک از عنصر جزئیات ، ورودی های جزئیات نامیده می شوند و هر ورودی جزئیات به عنوان یک عنصر مستقل در عنصر جزئیات رمزگذاری می شود.

  • یک جزئیات جزئیات با نام عنصر کاملاً واجد شرایط آن ، که از فضای نام URI و نام محلی تشکیل شده است ، مشخص می شود. عناصر فوری کودک عنصر جزئیات ممکن است دارای فضای نامگذاری باشد.
  • ویژگی رمزگذاری SOAP ممکن است برای نشان دادن سبک رمزگذاری مورد استفاده برای ورودی های جزئیات استفاده شود (به بخش 4. 1. 1 مراجعه کنید).
  • سایر زیرزمین های گسل ممکن است وجود داشته باشد ، به شرط آنکه آنها دارای فضای نام باشند.

    4. 4. 1 کدهای گسل صابون

    مقادیر FaultCode تعریف شده در این بخش باید هنگام توصیف گسل های تعریف شده توسط این مشخصات در عنصر FaultCode استفاده شود. شناسه فضای نام برای این مقادیر گسل "http://schemas. xmlsoap. org/soap/envelope/" است. استفاده از این فضا در مشخصات روشهای تعریف شده در خارج از مشخصات حاضر توصیه می شود (اما مورد نیاز نیست).

    مقادیر پیش فرض SOAP FALLECODE به روشی گسترده تعریف شده است که امکان تعریف مقادیر جدید SOAP FALUECODE را در ضمن حفظ سازگاری به عقب با مقادیر موجود در FaultCode تعریف می کند. مکانیسم مورد استفاده بسیار شبیه به کلاسهای وضعیت 1xx ، 2xx ، 3xx و غیره است که در HTTP تعریف شده است (به بخش 10 مراجعه کنید). با این حال ، به جای عدد صحیح ، آنها به عنوان نامهای واجد شرایط XML تعریف می شوند (به بخش 3 مراجعه کنید). شخصیت "."(DOT) به عنوان جداکننده مقادیر FaultCode استفاده می شود که نشان می دهد آنچه در سمت چپ نقطه است ، مقدار کد گسل عمومی تر از مقدار سمت راست است. مثال

    مجموعه مقادیر FaultCode تعریف شده در این سند عبارت است از:

    حزب پردازش یک فضای نام نامعتبر برای عنصر پاکت صابون پیدا کرد (به بخش 4. 1. 2 مراجعه کنید)

    یک عنصر فوری کودک از عنصر هدر صابون که یا درک نشده یا از طرف حزب پردازش پیروی نشده است ، حاوی یک ویژگی صابون خرد شده با مقدار "1" است (به بخش 4. 2. 3 مراجعه کنید)

    کلاس مشتری خطاها نشان می دهد که پیام به طور نادرست شکل گرفته است یا برای موفقیت در آن اطلاعات مناسب را شامل نمی شود. به عنوان مثال ، این پیام می تواند فاقد اطلاعات تأیید اعتبار یا پرداخت مناسب باشد. این به طور کلی نشانه ای است که پیام نباید بدون تغییر خشمگین شود. همچنین برای توضیحات مربوط به زیر بخش جزئیات گسل SOAP ، به بخش 4. 4 نیز مراجعه کنید.

    کلاس سرور خطاها نشان می دهد که پیام به دلایلی که مستقیماً به محتوای خود پیام مربوط نمی شود ، نمی تواند پردازش شود بلکه به پردازش پیام است. به عنوان مثال ، پردازش می تواند شامل برقراری ارتباط با یک پردازنده بالادست باشد که پاسخ نداد. پیام ممکن است در یک نقطه بعدی موفق شود. همچنین برای توضیحات مربوط به زیر بخش جزئیات گسل SOAP ، به بخش 4. 4 نیز مراجعه کنید.

    5. رمزگذاری صابون

    سبک رمزگذاری SOAP بر اساس یک سیستم نوع ساده ساخته شده است که تعمیم ویژگی های مشترک موجود در سیستم های نوع در زبان های برنامه نویسی ، پایگاه داده ها و داده های نیمه ساختار یافته است. یک نوع یا یک نوع ساده (مقیاس) است یا یک نوع مرکب است که به عنوان کامپوزیت از چندین قسمت ساخته شده است که هر کدام دارای یک نوع هستند. این با جزئیات بیشتری در زیر توضیح داده شده است. در این بخش قوانینی برای سریال سازی نمودار اشیاء تایپ شده تعریف شده است. در دو سطح کار می کند. اول ، با توجه به یک طرحواره در هر علامت مطابق با سیستم نوع شرح داده شده ، ممکن است یک طرح برای یک دستور زبان XML ساخته شود. دوم ، با توجه به یک طرح سیستم نوع و نمودار خاصی از مقادیر مطابق با آن طرحواره ، ممکن است یک نمونه XML ساخته شود. در معکوس ، با توجه به یک نمونه XML که مطابق با این قوانین تولید شده است ، و همچنین به طرح اصلی داده می شود ، ممکن است یک نسخه از نمودار ارزش اصلی ساخته شود.

    شناسه فضای نام برای عناصر و ویژگی های تعریف شده در این بخش "http://schemas. xmlsoap. org/soap/encoding/" است. نمونه های رمزگذاری نشان داده شده فرض می کنند همه اعلامیه های فضای نام در سطح عناصر بالاتر قرار دارند.

    استفاده از مدل داده و سبک رمزگذاری که در این بخش شرح داده شده است تشویق می شود اما لازم نیست. سایر مدل ها و رمزگذاری ها را می توان در رابطه با SOAP استفاده کرد (به بخش 4. 1. 1 مراجعه کنید).

    5. 1 قوانین برای رمزگذاری انواع در XML

    XML اجازه رمزگذاری بسیار انعطاف پذیر داده ها را می دهد. SOAP مجموعه ای از قوانین باریک تر برای رمزگذاری را تعریف می کند. در این بخش قوانین رمزگذاری در سطح بالایی تعریف می شود و بخش بعدی قوانین رمزگذاری را برای انواع خاص در صورت نیاز به جزئیات بیشتر شرح می دهد. رمزگذاری های شرح داده شده در این بخش می تواند در رابطه با نقشه برداری از تماس های RPC و پاسخ های مشخص شده در بخش 7 استفاده شود.

    برای توصیف رمزگذاری ، از اصطلاحات زیر استفاده می شود:

    1. "مقدار" یک رشته است ، نام یک اندازه گیری (تعداد ، تاریخ ، شمارش و غیره) یا کامپوزیتی از چندین مقادیر بدوی. همه مقادیر از انواع خاصی هستند.
    2. "مقدار ساده" یکی از قسمت های نامگذاری شده است. نمونه هایی از مقادیر ساده رشته های خاص ، اعداد صحیح ، مقادیر ذکر شده و غیره هستند.
    3. "مقدار مرکب" جمع روابط با مقادیر دیگر است. نمونه هایی از مقادیر مرکب سفارشات خرید خاص ، گزارش سهام ، آدرس خیابان و غیره است.
    4. در یک مقدار مرکب، هر مقدار مرتبط به طور بالقوه با نام نقش، ترتیبی یا هر دو متمایز می شود. این "دستیار" آن نامیده می شود. نمونه‌هایی از مقادیر ترکیبی شامل سفارش‌های خرید خاص، گزارش‌های سهام و غیره است. آرایه‌ها نیز مقادیر مرکب هستند. ممکن است مقادیر مرکب با چندین دسترسی داشته باشیم که هر کدام یک نام دارند، همانطور که برای مثال RDF انجام می دهد.
    5. "آرایه" یک مقدار ترکیبی است که در آن موقعیت ترتیبی به عنوان تنها تمایز بین مقادیر عضو عمل می کند.
    6. "struct" یک مقدار مرکب است که در آن نام Accessor تنها تمایز بین مقادیر عضو است و هیچ دسترسی به نام دیگری ندارد.
    7. "نوع ساده" کلاسی از مقادیر ساده است. نمونه‌هایی از انواع ساده کلاس‌هایی به نام‌های "string"، "integer"، "Enumeration class" و غیره هستند.
    8. "نوع مرکب" کلاسی از مقادیر مرکب است. نمونه‌ای از یک نوع ترکیبی، کلاس ارزش‌های سفارش خرید است که دسترسی‌های یکسانی (shipTo، totalCost، و غیره) را به اشتراک می‌گذارند، هرچند با مقادیر بالقوه متفاوت (و شاید بیشتر با محدودیت‌هایی در مقادیر خاص محدود شوند).
    9. در یک نوع ترکیبی، اگر یک دسترسی دارای نامی باشد که در آن نوع متمایز است اما نسبت به انواع دیگر متمایز نیست، یعنی نام به علاوه نوع با هم برای ایجاد یک شناسایی منحصر به فرد مورد نیاز است، نام "محلی" نامیده می شود. محدوده."با این حال، اگر نام تا حدی بر اساس یک شناسه منبع یکنواخت، مستقیم یا غیرمستقیم، باشد، به طوری که نام به تنهایی برای شناسایی منحصربه‌فرد دسترسی‌دهنده صرف نظر از نوع ظاهری آن کافی باشد، نام «گستره جهانی» نامیده می‌شود.
    10. با توجه به اطلاعات موجود در طرح واره نسبت به آنها که نمودار مقادیر سریال شده است، می توان تعیین کرد که برخی از مقادیر فقط می توانند توسط یک نمونه واحد از یک دسترسی مرتبط باشند. برای دیگران، نمی توان این تصمیم را تعیین کرد. اگر فقط یک دسترسی بتواند به آن ارجاع دهد، یک مقدار "تک مرجع" در نظر گرفته می شود. اگر با بیش از یک ارجاع، بالفعل یا بالقوه، "چند مرجع" است. توجه داشته باشید که ممکن است مقدار معینی نسبت به یک طرحواره «تک مرجع» و نسبت به طرحی دیگر «چند مرجع» در نظر گرفته شود.
    11. از نظر نحوی، یک عنصر ممکن است "مستقل" یا "جاسازی شده" باشد. عنصر مستقل هر عنصری است که در سطح بالای سریال سازی ظاهر می شود. بقیه عناصر تعبیه شده هستند.

    اگرچه استفاده از ویژگی XSI امکان پذیر است به گونه ای که نمودار مقادیر خود را در ساختار و انواع مقادیر آن توصیف می کند ، قوانین سریال سازی اجازه می دهد که انواع مقادیر فقط با مراجعه به یک طرح تعیین شودوادچنین طرح هایی ممکن است در نماد توصیف شده توسط "XML Schema Part 1: ساختارها" [10] و "XML Schema Part 2: Datatypes" [11] یا ممکن است در هر علامت دیگری باشد. توجه داشته باشید که ، در حالی که قوانین سریال سازی در مورد انواع ترکیبی غیر از آرایه ها و ساختارها اعمال می شود ، بسیاری از طرحواره ها فقط شامل انواع ساختار و آرایه هستند.

    قوانین سریال سازی به شرح زیر است: < SPAN> اگرچه استفاده از ویژگی XSI امکان پذیر است به گونه ای که نمودار مقادیر خود را در ساختار و انواع مقادیر آن توصیف می کند ، قوانین سریال سازی اجازه می دهد تا انواعمقادیر ممکن است فقط با مراجعه به یک طرح تعیین شود. چنین طرح هایی ممکن است در نماد توصیف شده توسط "XML Schema Part 1: ساختارها" [10] و "XML Schema Part 2: Datatypes" [11] یا ممکن است در هر علامت دیگری باشد. توجه داشته باشید که ، در حالی که قوانین سریال سازی در مورد انواع ترکیبی غیر از آرایه ها و ساختارها اعمال می شود ، بسیاری از طرحواره ها فقط شامل انواع ساختار و آرایه هستند.

      قوانین سریال سازی به شرح زیر است: اگرچه استفاده از ویژگی XSI امکان پذیر است: به گونه ای که نمودار مقادیر خود را در ساختار و انواع مقادیر آن توصیف می کند ، قوانین سریال سازی اجازه می دهد که انواع مقادیر ممکن استفقط با استناد به یک طرح تعیین می شود. چنین طرح هایی ممکن است در نماد توصیف شده توسط "XML Schema Part 1: ساختارها" [10] و "XML Schema Part 2: Datatypes" [11] یا ممکن است در هر علامت دیگری باشد. توجه داشته باشید که ، در حالی که قوانین سریال سازی در مورد انواع ترکیبی غیر از آرایه ها و ساختارها اعمال می شود ، بسیاری از طرحواره ها فقط شامل انواع ساختار و آرایه هستند.

    قوانین سریال سازی به شرح زیر است:

    همه مقادیر به عنوان محتوای عنصر نمایش داده می شوند. یک مقدار چند مرجع باید به عنوان محتوای یک عنصر مستقل نشان داده شود. یک مقدار تک مرجع نباید باشد (اما ممکن است باشد). برای هر عنصر حاوی یک مقدار، نوع مقدار باید حداقل با یکی از شرایط زیر نشان داده شود: (الف) نمونه عنصر حاوی یک ویژگی xsi:type، (ب) نمونه عنصر حاوی خود در یک موجود است. عنصر حاوی (احتمالاً پیش‌فرض) ویژگی SOAP-ENC:arrayType یا (c) یا نام عنصر دارای رابطه مشخصی با نوع آن است، سپس آن نوع از یک طرحواره قابل تعیین است. یک مقدار ساده به عنوان داده کاراکتر نشان داده می شود، یعنی بدون هیچ عنصر فرعی. هر مقدار ساده باید دارای نوعی باشد که یا در مشخصات طرحواره های XML، قسمت 2 [11] فهرست شده باشد یا نوع منبع آن در آن فهرست شده باشد (همچنین به بخش 5. 2 مراجعه کنید). یک مقدار مرکب به عنوان دنباله ای از عناصر کدگذاری می شود، که هر دسترسی توسط یک عنصر تعبیه شده که نام آن با نام دسترسی مطابقت دارد نشان داده می شود. دسترسی‌هایی که نام‌های آن‌ها محلی برای انواع حاوی آن‌ها است، نام‌های عنصر ناموفق دارند. بقیه نام‌های واجد شرایط دارند (به بخش 5. 4 نیز مراجعه کنید). یک مقدار ساده یا مرکب چند مرجع به‌عنوان یک عنصر مستقل حاوی یک ویژگی محلی و غیرقابل صلاحیت به نام «id» و از نوع «ID» بر اساس مشخصات XML کدگذاری می‌شود [7]. هر دسترسی به این مقدار یک عنصر خالی است که دارای یک ویژگی محلی و غیرقابل صلاحیت به نام "href" و از نوع "uri-reference" بر اساس مشخصات طرحواره XML [11] است، با یک مقدار ویژگی "href" از یک شناسه قطعه URI که به آن ارجاع می دهد. عنصر مستقل مربوطهرشته‌ها و آرایه‌های بایت به‌عنوان انواع ساده چند مرجع نشان داده می‌شوند، اما قوانین خاص به آن‌ها اجازه می‌دهد تا به طور مؤثر برای موارد رایج نمایش داده شوند (همچنین به بخش 5. 2. 1 و 5. 2. 3 مراجعه کنید). یک دسترسی به یک رشته یا مقدار آرایه بایت ممکن است یک ویژگی به نام "id" و از نوع "ID" در مشخصات XML داشته باشد [7]. اگر چنین است، همه دسترسی‌های دیگر به همان مقدار به‌عنوان عناصر خالی کدگذاری می‌شوند که دارای یک ویژگی محلی و نامشخص به نام «href» و از نوع «uri-reference» بر اساس مشخصات طرحواره XML [11]، با مقدار ویژگی «href» ازیک شناسه قطعه URI که به عنصر واحد حاوی مقدار ارجاع می دهد. رمزگذاری چندین ارجاع به یک مقدار مجاز است به گونه ای که گویی اینها ارجاعاتی به چندین مقدار متمایز هستند، اما تنها زمانی که از زمینه مشخص شود که معنای نمونه XML تغییر نکرده است.

    آرایه ها مقادیر مرکب هستند (همچنین به بخش 5. 4. 2 مراجعه کنید). آرایه های صابون به عنوان داشتن یک نوع "صابون": آرایه "یا نوعی مشتق شده در آنجا تعریف شده است.

    آرایه های صابون دارای یک یا چند بعد (درجه) هستند که اعضای آنها با موقعیت نظم متمایز می شوند. مقدار آرایه به عنوان یک سری از عناصر منعکس کننده آرایه نشان داده شده است که اعضا در توالی نظم صعودی ظاهر می شوند. برای آرایه های چند بعدی ابعاد در سمت راست به سرعت متفاوت است. هر عنصر عضو به عنوان یک عنصر مستقل نامگذاری شده است (به قانون 2 مراجعه کنید).

    آرایه های SOAP می توانند مقادیر تک مرجع یا چند مرجع باشند و در نتیجه ممکن است به عنوان محتوای یک عنصر تعبیه شده یا مستقل نشان داده شوند.

    آرایه های صابون باید حاوی یک ویژگی "SOAP-ENC: ArrayType" باشد که مقدار آن نوع عناصر موجود و همچنین ابعاد (های) آرایه را مشخص می کند. مقدار ویژگی "SOAP-ENC: ArrayType" به شرح زیر تعریف شده است:

    arraytypevalue = atype asize atype = qname *(رتبه) rank = "[" *("،") "]" asize = "[" #l طول "]" طول = 1 *رقم

    ساختار "Atype" نام نوع عناصر موجود است که به عنوان یک qname بیان شده است ، همانطور که در ویژگی "نوع" اعلامیه عنصر طرح XML ظاهر می شود و به عنوان یک نوع محدودیت عمل می کند (به این معنی که تمام مقادیر عناصر موجود ادعا می شودبه نوع مشخص شده ؛ یعنی نوع ذکر شده در SOAP-ENC: ArrayType باید نوع یا یک نوع فوق العاده از هر عضو آرایه باشد). در مورد آرایه های آرایه ها یا "آرایه های پیچیده" ، مؤلفه نوع به عنوان نام نوع "درونی" رمزگذاری می شود و به دنبال آن یک ساختار رتبه برای هر سطح از آرایه های تو در تو از 1 شروع می شود. هر بعد از 1 شروع می شود.

    ساختار "Asize" حاوی لیست جدا شده کاما از صفر ، یک یا چند عدد صحیح است که طول هر بعد آرایه را نشان می دهد. مقدار اعداد صحیح صفر نشان می دهد که هیچ مقدار خاصی ادعا نمی شود اما ممکن است با بازرسی اعضای واقعی اندازه تعیین شود.

    به عنوان مثال ، یک آرایه با 5 عضو از نوع آرایه عدد صحیح می تواند مقدار arraytypevalue "int [] [5]" را داشته باشد که مقدار atype "int []" است و مقدار ASIZE "[5]" است. به همین ترتیب ، آرایه ای با 3 عضو از آرایه های دو بعدی نوع عدد صحیح می تواند مقدار arraytypevalue "int [،] [3]" که مقدار atype "int [،]" است و مقدار ASIZE "است" [3] ".

    یک عضو آرایه SOAP ممکن است حاوی ویژگی "SOAP-ENC:offset" باشد که موقعیت افست آن آیتم را در آرایه محصور نشان می دهد. این می تواند برای نشان دادن موقعیت افست یک آرایه نیمه نمایش داده شده استفاده شود (به بخش 5. 4. 2. 1 مراجعه کنید). به همین ترتیب، یک عضو آرایه ممکن است دارای ویژگی "SOAP-ENC:position" باشد که موقعیت آن آیتم را در آرایه محصور نشان می دهد. این می تواند برای توصیف اعضای آرایه های پراکنده استفاده شود (به بخش 5. 4. 2. 2 مراجعه کنید). مقدار "SOAP-ENC:offset" و ویژگی "SOAP-ENC:position" به صورت زیر تعریف می شود:

    ثبت دیدگاه

    مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
    قوانین ارسال دیدگاه
    • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
    • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
    • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.