سؤال

لدي تطبيق C # Desktop، وأكثر خدمة ويب دون مشاكل (تمت إضافة WSDL بواسطة "إضافة مراجع الخدمة"، لذلك أقوم بإنشاء كائن واستدعاء وظائفه).

الآن، أريد استخدام تقنيات الاقتراع الطويلة ولكن لا يمكنني معرفة كيفية القيام بذلك من منظور العميل.

كيفية تكوين المهلة؟ يجب أن أستخدم موضوع مخصص لهذا؟ هل هناك أي مثال لتطبيق D # Desktop؟ (لم يتم العثور على أي)

شكرا يا دام

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

المحلول

يجب أن تكون قادرا على تكوين المهلة على كائن خدمة الويب - تعتمد التفاصيل على الفئة التي تستخدمها بالضبط، ولكن انظر إلى WebClientProtocol.Timeout مثال.

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

بهذه الطريقة لا تحتاج إلى "النفايات" موضوع في انتظار الاستجابة فقط - ولكن قد تجد أن نموذج البرمجة غير المتزامن يصعب فهمه من المرء المتزامن. إذا كنت قد حصلت فقط على واحد أو اثنين من هذه الطلبات في أي وقت، فمن غير المرجح أن تكون الخيوط الزائدة الإضافية مشكلة. إذا كنت تنتظر الردود من 500 خدمة مختلفة، فهذا أمر مختلف ونموذج ASYNC سيكون بالتأكيد هو الطريق للذهاب.

نصائح أخرى

لقضايا الخيوط، راجع إجابة جون.

بالنسبة لمشكلة المهلة، إليك الحل: في VS 2008، عندما أضيف "مرجع خدمة" من WSDL، سيستخدم WCF افتراضيا، ولا يمكنني العثور على كيفية تعيين قيمة مهلة معها.

لذلك، عند النقر بزر الماوس الأيمن على مراجع الخدمة، يجب أن اختر "مراجع الويب" (Advanced / إضافة مرجع ويب). بهذه الطريقة، سيستخدم فقط خدمات الويب "العادية" وحتى معلمة المهلة المتاحة.

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