PDA

View Full Version : تفاوت Error با fault در Soap چی هست؟



Jason.Bourne
سه شنبه 13 اردیبهشت 1390, 16:21 عصر
من تفاوت Error با fault در Soap را نمی دونم چی هست!

لطفا یک نفر برای من توضیح بده :لبخندساده:

mehdi.mousavi
سه شنبه 13 اردیبهشت 1390, 17:19 عصر
من تفاوت Error با fault در Soap را نمی دونم چی هست! لطفا یک نفر برای من توضیح بده :لبخندساده:

سلام.
وقتی در برنامه خطایی رخ میده (منظور همون Error هستش) و میخواهیم اون خطا رو از طریق پیام SOAP به Client ارسال کنیم، اون خطا رو میتونیم در قالب SOAP Fault Message به Client ارسال کنیم. SOAP، توانایی نگهداری خطاهایی که رخ میده رو در Fault Element خودش داره. Fault Element خودش میتونه حاوی حداقل 4 Element باشه:


faultcode که کد خطای مورد نظر ما رو نگهداری میکنه.
faultstring که بیانگر رشته ای برای نمایش دلیل رخ دادن خطاست.
faultactor که نشوندهنده رویه ای ای هستش که باعث بروز خطا شده.
detail که جزییات خطا رو نشون میده (و قابل Extend کردن هستش).

حالا این خطا ممکنه یک خطای ساده در SQL Server باشه، میتونه یک خطای پیچیده در Active Directory باشه، یا یک Custom Error که دوست داریم اونو در قالب فوق الذکر به Client ارسال کنیم. بطور مثال این Sample رو (از سایت مایکروسافت (http://msdn.microsoft.com/en-us/library/ms189538.aspx)) ببینید:

<SOAP-ENV:Fault xmlns:sqlsoapfaultcode="http://schemas.microsoft.com/sqlserver/2004/SOAP/SqlSoapFaultCode">
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>There was an error in the incoming SOAP request packet: Client, InvalidXml</faultstring>
<faultactor>http://schemas.microsoft.com/sqlserver/2004/SOAP</faultactor>
<detail xmlns:SOAP-1_2-ENV="http://www.w3.org/2003/05/soap-envelope">
<SOAP-1_2-ENV:Code>
<SOAP-1_2-ENV:Value>SOAP-1_2-ENV:Sender</SOAP-1_2-ENV:Value>
<SOAP-1_2-ENV:Subcode>
<SOAP-1_2-ENV:Value>sqlsoapfaultcode:InvalidXml</SOAP-1_2-ENV:Value>
</SOAP-1_2-ENV:Subcode>
</SOAP-1_2-ENV:Code>
<SOAP-1_2-ENV:Reason>
<SOAP-1_2-ENV:Text xml:lang="en-US">There was an error in the incoming SOAP request packet: Sender, InvalidXml</SOAP-1_2-ENV:Text>
</SOAP-1_2-ENV:Reason>
<SOAP-1_2-ENV:Node>http://MyServer:80/sql</SOAP-1_2-ENV:Node>
<SOAP-1_2-ENV:Role>http://schemas.microsoft.com/sqlserver/2004/SOAP</SOAP-1_2-ENV:Role>
<SOAP-1_2-ENV:Detail>
<sqlresultstream:SqlMessage xsi:type="sqlmessage:SqlMessage">
<sqlmessage:Class>16</sqlmessage:Class>
<sqlmessage:LineNumber>0</sqlmessage:LineNumber>
<sqlmessage:Message>XML parsing: line 3, character 0, incorrect document syntax</sqlmessage:Message>
<sqlmessage:Number>9422</sqlmessage:Number>
<sqlmessage:Source>Microsoft-SQL/9.0</sqlmessage:Source>
<sqlmessage:State>1</sqlmessage:State>
</sqlresultstream:SqlMessage>
</SOAP-1_2-ENV:Detail>
</detail>
</SOAP-ENV:Fault>

با کمی دقت، اون 4 Element رو می تونید در XML فوق پیدا کنید. اینجا، هدف نمایش یکی از خطاهای SQL Server بوده... بنابراین، سوال شما، یعنی تفاوت Error با Fault در SOAP سوال صحیحی نیستش. درست اینه که بپرسیم: "چطوری میشه یک Error رو در قالب SOAP نمایش داد؟" و جواب اینه: "با استفاده از SOAP Fault Element".

موفق باشید.