نتائج خدمة ويب ASP.NET وفئات الوكيل وتحويل النوع

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

  •  08-06-2019
  •  | 
  •  

سؤال

ما زلت جديدًا في عالم ASP.NET، لذا قد أكون بعيدًا عن القاعدة هنا، لكن هذا حسب معرفتي (المحدودة) حتى الآن!

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

الآن، أقوم أيضًا بإنشاء طريقة مساعدة تأخذ "جهة اتصال" وتقوم ببعض السحر بها، مثل Utils.BuyContactNewHat() يقول.وهو بالطبع يأخذ نوع جهة الاتصال Business.Contact.

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

Contact c = MyWebService.GetContact("Rob);
Utils.BuyContactNewHat(c); // << Error Here

منذ نوع العودة من GetContact هو من MyWebService.Contact و لا Business.Contact كما هو متوقع.أتفهم سبب ذلك لأنه عند الوصول إلى خدمة ويب، فإنك في الواقع تقوم بالبرمجة مقابل فئة الوكيل التي تم إنشاؤها بواسطة WSDL.

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

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

المحلول

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

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

نصائح أخرى

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

أوصي بأن تنظر في كتابة ملحق مستورد المخطط، والذي يمكنك استخدامه للتحكم في إنشاء كود الوكيل.يمكن استخدام هذا الأسلوب لحل مشكلتك (برشاقة) دون أي أخطاء (مثل نسخ الكائنات من مساحة اسم إلى أخرى، أو تعديل فئة Reference.cs التي تم إنشاؤها بواسطة الوكيل فقط لاستبدالها في المرة التالية التي تقوم فيها بتحديث مرجع الويب).

إليك برنامجًا تعليميًا جيدًا (جدًا) حول هذا الموضوع:

http://www.microsoft.com/belux/msdn/nl/community/columns/jdruyts/wsproxy.mspx

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