إضافة طرق إلى خدمة الويب: هل يحتاج العملاء القدامى إلى تحديث مراجع الويب؟

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

سؤال

يستخدم Producta خدمة الويب الوحيدة الخاصة بنا ، وهي عملية نشر منفصلة عن Producta. ننشر على حد سواء في الإنتاج.

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

عندما ننشر ProductB إلى الإنتاج ، ننشر أيضًا (إلى الإنتاج) الإصدار الجديد من خدمة الويب الوحيدة لدينا (إلى عنوان URL لنفس نقطة النهاية حيث يتوقع Producta العثور عليه). نحن لا نعيد نشر المنتج إلى الإنتاج.

لقد تغيرت WSDL لخدمة الويب الوحيدة في الإنتاج ، لكن توقيعات الأساليب التي تستهلكها Producta لم تتغير. ما زالوا في WSDL.

هل سيكون لدى Producta أي مشاكل بسبب ترقية خدمة الويب الوحيدة لدينا بهذه الطريقة؟

هل يتعين عليك ترقية عميل خدمة ويب إذا تغيرت خدمة الويب بطريقة تركت أساليب العميل الأصلية دون تغيير؟

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

المحلول

لا. طالما تركت الأساليب التي يستخدمها المنتج A بمفردك ، فلا يتعين عليك تحديث نسخة المنتج A من خدمة الويب.

نصائح أخرى

فقط لإضافة المزيد من التفاصيل إلى الإجابة الحالية ، التغييرات الوحيدة على خدمة الويب التي تتطلب تغييرات مقابلة إلى وكيل العميل هي:

  • إزالة الطرق ؛
  • تغيير توقيعات الطريقة ؛
  • تغيير الروابط/السلوك (أي لاستخدام التشفير).

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

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

عادة أود أن أقول لا. ومع ذلك ، لدينا واحد من أصل أكثر من 50 عميلًا لديهم مشاكل في هذا باستخدام Jax-WS. يحصلون على خطأ مثل هذا:

javax.xml.ws.WebServiceException: 

The Endpoint validation failed to validate due to the following errors: 

:: Invalid Endpoint Interface :: :: The operation names in the WSDL portType
do not match the method names in the SEI or Web service implementation class. 
wsdl operations = [...] 

أعتقد أنه مرتبط بهذا:

http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp؟topic=٪2FCom.ibm.websphere.nd.multiplatform.doc٪2finfo٪2fae٪2fae٪2ftwbs_devjaxws_exposewebmeml

الذي يقول: "افضل تمرين: تأكد من تجديد القطع الأثرية الجانبية للعميل في أي وقت تتلقى فيه ملف WSDL محدث. "

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

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

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

لقد كنت أبحث بالفعل عن تقنية للقيام بذلك تلقائيًا. وذلك لمنع تعطل جانب العميل عندما يتم تحديث خدمات الويب. تعثرت عبر هذا الموضوع في هذا البحث.

ليس حقًا إجابة ولكن طويلة جدًا للتعليق هنا.

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

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

تؤمن بعض المؤسسات باختبار رمز العميل عندما يتغير رمز العميل.

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