هل يرفع WCF المستوى أم مستوى التعقيد فقط؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أنا أفهم قيمة نموذج الخدمة/المضيف/العميل المكون من ثلاثة أجزاء والذي تقدمه WCF.ولكن هل أنا وحدي أم يبدو أن WCF أخذت شيئًا مباشرًا ومباشرًا إلى حد ما (نموذج ASMX) وأحدثت فوضى فيه؟

هل هناك بديل لاستخدام سطر أوامر SvcUtil خطوة إلى الوراء في الوقت المناسب لإنشاء الوكيل؟مع خدمات ASMX تم توفير أداة الاختبار تلقائيًا.هل هناك بديل جيد اليوم مع WCF؟

أقدر أن عناصر WS * مدمجة بشكل أكثر إحكامًا مع WCF وأتمنى أن أجد بعض المكاسب لـ WCF هناك، لكن يا إلهي، وإلا فأنا في حيرة من أمري.

كما أن حالة الكتب المتاحة لـ WCF سيئة للغاية في أحسن الأحوال.قام جوفال لوي، المؤلف الرائع، بتأليف كتاب مرجعي جيد لـ O'Reilly بعنوان "برمجة خدمات WCF" ولكنه لا يفعل الكثير (بالنسبة لي على أي حال) لتعلم استخدام WCF الآن.مقدمة هذا الكتاب (وأفضل تنظيمًا قليلاً، ولكن ليس كثيرًا، كبرنامج تعليمي) هو تعلم WCF لميشيل ليرو بوستامانتي.إنه يحتوي على مواقع جيدة ولكنه قديم في مكانه وقد اختفى موقع الويب الخاص به.

هل لديك مراجع تعليمية جيدة لـ WCF إلى جانب الاستمرار في البحث عن الأشياء في Google؟

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

المحلول

حسنًا، ها نحن ذا.أولاً، تم تحديث كتاب ميشيل ليروكس بوستامانتي لـ VS2008.الموقع الإلكتروني للكتاب لم يختفي.إنه جاهز الآن، ويحتوي على الكثير من معلومات WCF الرائعة.توفر على موقع الويب هذا كودًا محدثًا متوافقًا مع VS2008 لجميع الأمثلة الموجودة في كتابها.إذا قمت بالطلب من أمازون، فسوف تحصل على النسخة المعاد طبعها والتي تم تحديثها.

WCF ليس كذلك فقط بديل لـ ASMX.من المؤكد أنه يمكنه (وهو يعمل بشكل جيد) أن يحل محل ASMX، ولكن الفائدة الحقيقية هي أنه يسمح باستضافة خدماتك ذاتيًا.تم دمج معظم الوظائف من WSE منذ البداية.الإطار هو للغاية قابلة للتكوين، والقدرة على خدمة نقاط نهاية متعددة عبر بروتوكولات متعددة أمر مذهل، IMO.

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

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

أنصحك بمشاهدة بث واحد على الأقل من بث ميشيل على الويب.إنها مقدمة فعالة للغاية، ومن الواضح أنها تتمتع بخبرة لا تصدق عندما يتعلق الأمر بـ WCF.إنها تقوم بعمل رائع في إزالة الغموض عن الأعمال الداخلية لـ WCF من الألف إلى الياء.

نصائح أخرى

عادةً ما أستخدم Google للعثور على إجاباتي في WCF وأجد نفسي عادةً في المدونات التالية:

مدونات تحتوي على مقالات قيمة من WCF

مقالات قيمة أخرى وجدتها

أجد صعوبة في معرفة متى يجب علي أو سأستخدم WCF.لماذا؟لأنني أضع الإنتاجية والبساطة على رأس قائمتي.لماذا كان نموذج ASMX ناجحًا للغاية، لأنه نجح، ويمكنك جعله يعمل بسرعة.ومع VS 2005 و.NET 2.0، كان wsdl.exe يقدم خدمات رائعة ومتوافقة.

في الحياة الواقعية، يجب أن يكون لديك عدد قليل جدًا من بروتوكولات الاتصال في بنيتك.هذا يبقي الأمر بسيطًا وقابلاً للصيانة.إذا كنت بحاجة إلى الوصول إلى الأنظمة القديمة، فاكتب محولات محددة لها حتى تتمكن من اللعب في عالم SOA الجميل والرائع.

يعد WCF أقوى بكثير من ASMX ويقوم بتوسيع نطاقه بعدة طرق.يقتصر ASMX على HTTP فقط، في حين يمكن لـ WCF استخدام عدة بروتوكولات لاتصالاته (من المؤكد أن HTTP لا يزال هو الطريقة التي يستخدمها بها معظم الأشخاص، على الأقل للخدمات التي تحتاج إلى أن تكون قابلة للتشغيل البيني).من السهل أيضًا تمديد WCF.على الأقل، من الممكن تمديده بطرق لا يمكن تمديدها لـ ASMX.قد يكون "السهل" هو تمديده.=)

الوظائف الإضافية التي تقدمها WCF تفوق بكثير التعقيد الذي تضيفه، في رأيي.أشعر أيضًا أن نموذج البرمجة أسهل.تعتبر DataContracts أجمل بكثير من الاضطرار إلى إجراء تسلسل باستخدام تسلسل XML مع الخصائص العامة لكل شيء، على سبيل المثال.إنها أيضًا أكثر تصريحًا بطبيعتها، وهو أمر لطيف أيضًا.

انتظر....هل سبق لك استخدام .NET Remoteing، لأن هذا هو الشيء الحقيقي الذي يتم استبداله.يعتبر الاتصال عن بعد بـ .NET أمرًا معقدًا جدًا في حد ذاته.أجد WCF أسهل وأفضل.

لا أرى أنه يُذكر كثيرًا بما فيه الكفاية، لكن أنت يستطيع لا تزال تنفذ خدمات بسيطة إلى حد ما باستخدام WCF، تشبه إلى حد كبير خدمات ASMX.على سبيل المثال:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
    [OperationContract]
    public string HelloWorld()
    {
        return "Hello World";
    }

}

لا يزال يتعين عليك تسجيل نقطة النهاية في ملف web.config الخاص بك، ولكن هذا ليس سيئًا للغاية.

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

يتضمن VS2008 عنصر قائمة السياق "إضافة مرجع الخدمة" الذي سيقوم بإنشاء الوكيل لك خلف الكواليس.

كما ذكرنا سابقًا، لا يُقصد من WCF فقط أن يكون بديلاً لأنواع خدمات الويب ASMX، ولكن توفير منهجية متسقة وآمنة وقابلة للتطوير لجميع الخدمات القابلة للتشغيل البيني، سواء كان ذلك عبر HTTP أو tcp أو الأنابيب المسماة أو عمليات نقل MSMQ.

سأعترف بأن لدي مشكلات أخرى مع WCF (على سبيل المثال.إعادة كتابة توقيعات الطريقة عند الكشف عن خدمة عبر basicHTTP - راجع هنا, ، لكن بشكل عام أعتقد أنه تحسن واضح

إذا كنت تستخدم VS2008 وقمت بإنشاء مشروع WCF، فستحصل تلقائيًا على أداة اختبار عندما تضغط على تشغيل/تصحيح ويمكنك إضافة مرجع دون الحاجة إلى استخدام svcutil.

كانت أفكاري الأولية حول WCF هي نفسها تمامًا!فيما يلي بعض الحلول:

  1. قم ببرمجة طبقة الوكيل/العميل الخاصة بك باستخدام الأدوية العامة (انظر الفئات قاعدة العملاء, ، ربط).لقد وجدت أنه من السهل البدء في العمل، ولكن من الصعب إتقانه.
  2. استخدم تطبيق جهة خارجية لـ 1 (SoftwareIsHardwork هو المفضل لدي حاليا)

صندوق رأس المال العامل هو بديل للجميع في وقت سابق خدمة ويب تقنيات من مايكروسوفت.كما أنها تفعل أكثر بكثير مما يعتبر تقليديًا "خدمات الويب".

تعد "خدمات الويب" الخاصة بـ WCF جزءًا من نطاق أوسع بكثير من الاتصالات عن بعد التي يتم تمكينها من خلال WCF.سوف تحصل على درجة أعلى بكثير من المرونة وقابلية النقل عند القيام بالأشياء في WCF مقارنة بـ ASMX التقليدي لأن WCF مصمم، من الألف إلى الياء، لتلخيص جميع البنى التحتية المختلفة للبرمجة الموزعة التي تقدمها Microsoft.يمكن الاتصال بنقطة النهاية في WCF بنفس السهولة عبر SOAP/XML كما هو الحال عبر TCP/binary وتغيير هذه الوسيلة هو ببساطة تعديل ملف التكوين.من الناحية النظرية، يؤدي هذا إلى تقليل كمية التعليمات البرمجية الجديدة المطلوبة عند نقل أو تغيير احتياجات العمل وأهدافه وما إلى ذلك.

ASMX is older than WCF, and anything ASMX can do so can WCF (and more).في الأساس، يمكنك أن ترى أن WCF يحاول تجميع كل الطرق المختلفة معًا بشكل منطقي لجعل تطبيقين يتواصلان في عالم Microsoft؛كانت ASMX مجرد واحدة من هذه الطرق العديدة ولذلك تم تجميعها الآن تحت مظلة قدرات WCF.

لا يمكن الوصول إلى خدمات الويب إلا عبر HTTP وتعمل في بيئة عديمة الحالة، حيث يكون WCF مرنًا لأنه يمكن استضافة خدماته في أنواع مختلفة من التطبيقات.السيناريوهات الشائعة لاستضافة خدمات WCF هي IIS وWAS والاستضافة الذاتية وخدمة Windows المُدارة.

والفرق الرئيسي هو أن خدمات الويب تستخدم XmlSerializer.لكن WCF يستخدم DataContractSerializer وهو أفضل في الأداء مقارنة بـ XmlSerializer.

في أي السيناريوهات يجب استخدام WCF

  • خدمة آمنة لمعالجة المعاملات التجارية.خدمة ذلك
  • يقوم بتزويد الآخرين بالبيانات الحالية، مثل تقرير حركة المرور أو غيره
  • خدمة المراقبة.خدمة الدردشة التي تسمح لشخصين
  • التواصل أو تبادل البيانات في الوقت الحقيقي.تطبيق لوحة القيادة
  • يقوم باستقصاء خدمة واحدة أو أكثر للبيانات وتقديمها بطريقة منطقية
  • عرض تقديمي.الكشف عن سير عمل تم تنفيذه باستخدام Windows Workflow
  • الأساس كخدمة WCF.تطبيق Silverlight لاستطلاع أ
  • خدمة للحصول على أحدث خلاصات البيانات.

مميزات برنامج WCF

  • دائره توجيه
  • التوافقية
  • أنماط رسائل متعددة
  • بيانات تعريف الخدمة
  • عقود البيانات
  • حماية
  • وسائل النقل والترميزات المتعددة
  • رسائل موثوقة وفي قائمة الانتظار
  • رسائل دائمة
  • المعاملات
  • دعم AJAX وREST
  • القابلية للتوسعة

مصدر: المصدر الرئيسي للنص

MSDN؟عادةً ما أتعامل بشكل جيد مع مرجع المكتبة نفسه، وأتوقع عادةً العثور على مقالات قيمة هناك.

فيما يتعلق بما يقدمه، أعتقد أن الجواب هو التوافق.كانت خدمات ASMX جميلة جدًا.لا يعني أنهم لم يحاولوا أن يكونوا متوافقين مع المستهلكين الآخرين؛لكن النموذج لم يتم تصميمه ليناسب الكثير إلى جانب صفحات ويب ASP.NET وبعض عملاء Microsoft المخصصين الآخرين.في حين أن WCF، نظرًا لبنيته المعمارية، يسمح لخدمتك بالحصول على نقاط نهاية قائمة على معايير مفتوحة جدًا، على سبيل المثال.الراحة، JSON، الخ.بالإضافة إلى الصابون المعتاد.من المحتمل أن يكون لدى الأشخاص الآخرين وقتًا أسهل بكثير في استهلاك خدمة WCF الخاصة بك مقارنة بخدمة ASMX الخاصة بك.

(يتم استنتاج كل هذا بشكل أساسي من قراءة MSDN المقارنة، لذا يجب على الشخص الذي يعرف المزيد أن لا تتردد في تصحيحي.)

لا ينبغي اعتبار WCF بديلاً لـ ASMX.وبالحكم على كيفية وضعه وكيفية استخدامه داخليًا بواسطة Microsoft، فهو في الحقيقة قطعة معمارية أساسية يتم استخدامها لأي نوع من الاتصالات عبر الحدود.

أعتقد أن WCF تعمل بالفعل على تطوير تنفيذ خدمات الويب ASMX بعدة طرق.أولا وقبل كل شيء، فهو يوفر نموذج كائن ذو طبقات لطيف للغاية يساعد على إخفاء التعقيد الجوهري للتطبيقات الموزعة.ثانيًا، يمكنك الحصول على أكثر من مجرد أنماط مراسلة الطلب وإعادة التشغيل، بما في ذلك الإشعارات غير المتزامنة من خادم إلى عميل (وهو أمر مستحيل باستخدام HTTP النقي)، وثالثًا استخلاص بروتوكول النقل الأساسي من رسائل XML وبالتالي دعم HTTP وHTTPS وTCP وغيرها بشكل أنيق.يعد التوافق مع الإصدارات السابقة مع خدمات الويب من "الجيل الأول" ميزة إضافية أيضًا.يستخدم WCF معيار XML كتنسيق التمثيل الداخلي.يمكن اعتبار ذلك ميزة أو عيبًا، خاصة مع تزايد شعبية "بدائل XML الخالية من الدهون" مثل JSON.

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

سيكون أمرا رائعا إذا كان لدى أي شخص أي اختصارات أو نصائح لهؤلاء.

أجد أن هذا هو الألم.حيث أن لدي .NET في كلا الطرفين، ويتم تحميل نفس ملفات dll "العقدية" في كلا الطرفين وما إلى ذلك.ولكن بعد ذلك لا بد لي من العبث بالكثير من التفاصيل مثل سمات "KnownType".

يقوم WCF أيضًا بالسماح لعميل واحد أو اثنين فقط بالاتصال بالخدمة حتى تقوم بتغيير الكثير من التكوينات.إن تغيير التكوين من التعليمات البرمجية ليس بالأمر السهل، وشحن الكثير من ملفات comfig ليس خيارًا، حيث أنه من الصعب جدًا دمج تغييراتنا في أي تغييرات قد يكون العميل قد أجراها في وقت الترقية (كما أننا لا نريد عملاء اللعب بإعدادات WCF!)

يميل الاتصال عن بعد بـ .NET إلى العمل فقط في معظم الأوقات.

أعتقد أن محاولة يدّعي أن الاتصالات المستندة إلى كائنات .NET إلى .NET هي نفس إرسال بت من النص (xml) إلى نظام غير معروف، كانت خطوة بعيدة جدًا.

(في المرات القليلة التي استخدمنا فيها WCF للتحدث إلى نظام Java، وجدنا أن XSD الذي قدمه نظام Java لا يتطابق مع XML الذي يريده على أي حال، لذلك كان علينا ترميز الكثير من تعيينات XML يدويًا.)

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