وف خدمة طريقة في اتجاه واحد مع رسالة خطأ

StackOverflow https://stackoverflow.com//questions/9680781

  •  13-12-2019
  •  | 
  •  

سؤال

كنت أرغب في إنشاء طريقة في اتجاه واحد لخدمة وف.كل شيء على ما يرام ما لم أريد أن أعود رسالة خطأ - إن وجدت.

أنا باستخدام وسف الأزرق رمز مولد ل وسدل وملفات العقد.

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

ومع ذلك ، أتساءل عما إذا كنت قد كسرت قواعد إنشاء خدمة الويب/وسدل ...لأنه من وسدل خدمة مخطط مولد يخلق بالنسبة لي الاتصالات في اتجاه واحد (تعيين إلى 'صحيح') وغيرها في لغات البرمجة الأخرى' مولدات ربما تفعل الشيء نفسه ...

فهل هو الصحيح ما فعلته?كيف يمكنني تغيير وسدل بحيث مولد يمكن إنشاء رمز بشكل مناسب?

إذا لم أتمكن من الناحية النظرية من استخدام الخطأ في الاتصال أحادي الاتجاه ، فهل أحتاج إلى بنية إضافية عند الاستجابة لإرجاع أي خطأ?

شكراً!

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

المحلول

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

موزعي وسدل على أساس صافي (مثل (دبليو إس إف).الأزرق و سفكوتيل) سوف تولد عمليات خدمة في اتجاه واحد ل <wsdl:operation> العناصر التي لا تفعل لديك المقابلة <wsdl:output> عنصر.

على سبيل المثال هذه العملية وسدل هو في اتجاه واحد:

<wsdl:definitions>
    <wsdl:portType>
        ... 
        <wsdl:operation name="Foo">
           <wsdl:input message="tns:FooRequest" />
        </wsdl:operation>
    </wsdl:portType>
</wsdl:definitions>

من ناحية أخرى ، تحديد عملية مع فارغة <wsdl:output> عنصر (أي نوع شسد يحتوي على تسلسل فارغ) سيتم تعيينها إلى void ليس في اتجاه واحد الطريقة في صافي ، والتي يمكن أن تحتوي اختياريا على إعلان خطأ:

<wsdl:definitions>
    <wsdl:portType>
        ... 
        <wsdl:operation name="Foo">
           <wsdl:input message="tns:FooRequest" />
           <wsdl:output message="tns:FooResponse" />
           <wsdl:fault message="tns:FooFault" />
        </wsdl:operation>
    </wsdl:portType>
</wsdl:definitions>

حيث <tns:FooResponse> يتم تعريف النوع ببساطة على أنه:

<xs:element name="FooResponse">
    <xs:complexType>
        <xs:sequence/>
    </xs:complexType>
</xs:element>

نصائح أخرى

في WCF، تعني العملية أحادية الاتجاه لا تحتوي العملية على قيم عادلة، ولا يهتم العميل بالنجاح أو فشل الاحتجاج.

في WCF، لدينا أيضا بعض العمليات الأخرى التي هي في اتجاه واحد بشكل طبيعي، مثل تعمل MSMQ عبر WCF، ثم يتم تعيين العمليات عادة في اتجاه واحد.

لذلك، إذا كنت ترغب في إرجاع شيء ما للإشارة إلى حالة الاحتجاز، فستكون في اتجاه واحد غير خيار صحيح، يمكنك فقط استخدام عملية WCF العادية التي ليست في اتجاه واحد بدلا من ذلك.

لعملية اتجاه واحد، إليك مقالة للرجوع اليها WCF في اتجاه واحد

أشعر أنك فعلت الشيء الصحيح.لأي نوع من العميل (C #، Java، C ++، PHP) يحتاجون فقط إلى WSDL لإنشاء الوكيل.أشعر أنه يجب أن تعمل في لغات أخرى أيضا.أفضل استخدام SOAPUI (عميل الصابون المحايد) لاختبار خدمتك.

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