سؤال

لقد بدأت مؤخرا في القراءة حول استخدام Webhttpbinding في WCF وتمكن من استهلاك خدمات الراحة، ومع ذلك، فقد تعرضت على هذا واحد لفترة من الشيء الآن.

أنا أكتب خدمة تجعل طلب واحد ل API المعطاة، ومع ذلك، يمكن أن يعيد واحدة من العديد من الردود.

على سبيل المثال، استجابة عامة:

<ActualResponse>
<ResponseItem>
    <Name />
    <Area />
</ResponseItem>
</ActualResponse>

ومع ذلك، إذا كان هناك شيء غير صالح في الطلب الصادر أو الخدمة الاستجابة نفسها تعاني من أي نوع من المشكلات سيكون استجابة العودة:

<ErrorResponse>
    <Message />
</ErrorResponse>

كان لدى Pedram Rezaei وظيفة رائعة خدمات الراحة المستهلكة, ، وهو المكان الذي أقترض فيه معظم معلوماتي من. من ما يمكنني قوله، يمكننا إنشاء كائن طالما أن الكائن يحتوي على سمات متسلسلة محددة. هذه المشكلة، لا يوجد أي شرط يتم إنشاؤها للفئة (Errorresponse / ActualResponse).

أنا غير متأكد إذا كنت يجب أن أبحث في نوع من وظيفة TryParse التي ترسل الطلب الأولي وأصبح الخطأ إذا لم يحدث أي تحارج أو إذا كان هناك نهج أكثر أناقة.

أنا جديد إلى حد ما في عالم WCF، وبالتالي فإن الاحتمال موجود قد يطلني بالكامل على شيء ما!

هل كانت مفيدة؟

المحلول

أعتقد أنه يمكنك استعارة بعض الممارسات من الصابون، والتي لها تسلسل هرمي مثل ذلك:

<soap:Envelope>
    <soap:Body>
        ... message contents
    </soap:Body>
</soap:Envelope> 

أنا لا أقترح أنك تستخدم الصابون، وأنا أقترح أن تتعلم من التصميم المستخدمة من قبل الصابون. ما يسميه الصابون استجابة النجاح (أو في كلماتك "الفعلية") داخل الجسم، أو عودة أ الصابون: خطأ داخل الجسم.

قد يبدو النجاح في الصابون مثل هذا:

<soap:Envelope>
    <soap:Body>
        <ActualResponse>... </ActualResponse>
    </soap:Body>
</soap:Envelope> 

في حين أن خطأ قد يبدو مثل هذا:

<soap:Envelope>
    <soap:Body>
        <soap:Fault>... </soap:Fault>
    </soap:Body>
</soap:Envelope> 

في حالتك، قد يكون لديك هذا:

<ServiceResponse> 
     <ActualResponse> ... </ActualResponse>
</ServiceResponse> 

أو

<ServiceResponse> 
     <Fault> ... </Fault>
</ServiceResponse> 

وتسلسل XML جيد حقا في ذلك. وبعد وبعد

ولكن يبدو أنه لا يوجد لديك سيطرة على المغلف. الحقيقة هي أنه يمكنك الحصول على ردود متعددة مختلفة. للتعامل مع هذا، يمكنك التفاف الاستجابة الفعلية المستلمة في مغلف XML مفتعلة، وتغمر نتيجة الذي - التي.

إذا حصلت علىu003CActualResponse> ...u003C/ActualResponse> ، لفه في مظروف غير قابل للتغلب للحصول على شيء مثلu003CServiceResponse>u003CActualResponse> ...u003C/ActualResponse>u003C/ServiceResponse> ، ثم التحمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top