سؤال

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

على سبيل المثال المبسط:

    public class Name
    {
        public string FirstName {get; set;}
        public string Surname { get; set; }

        public override string ToString()
        {
            return string.Concat(FirstName, " ", Surname);
        }
    }

لا أرغب في إعادة ترميز أجزاء من الوظائف في صفي.والشيء الآخر هو أن أي كود موجود يعالج هذه الفئة لن يعمل من جانب العميل لأن فئة العميل التي يتم إنشاؤها ستكون من نوع مختلف.

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

المحلول

حسنًا، أرى أن هذا كان قرارًا تصميميًا صريحًا من جانب SOAP، لذا ليس من المفترض أن تقوم بذلك في الواقع.لقد وجدت ما يلي صفحة وهذا ما يفسر لماذا:

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

وبعد أن قلت أن هناك احتمالين آخرين:

  1. قم بإنشاء مراجع الويب في Visual Studio أو باستخدام wsdl.exe.ثم انتقل إلى ملف Reference.cs (أو .vb) الذي تم إنشاؤه واحذف النوع بشكل صريح.ثم قم بإعادة التوجيه إلى النوع الذي تريده والموجود في تجميع آخر.
  2. يمكنك مشاركة الأنواع بين خدمات الويب من جانب العميل عن طريق wsdl.exe والمعلمة /sharetypes.

نصائح أخرى

إذا كنت تريد أن يكون لديك نوع أو بنية مشتركة بين خدمة الويب الخاصة بك والعميل الخاص بك، أضف بنية عامة إلى مشروع خدمة الويب الخاص بك كما يلي:

public struct Whatever
{
    public string A;
    public int B;
}

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

[WebMethod]
public Whatever GiveMeWhatever()
{
    Whatever what = new Whatever();
    what.A = "A";
    what.B = 42;
    return what;
}

بعد تحديث مرجع الويب الخاص بالعميل الخاص بك، ستتمكن من إنشاء بنيات من النوع "أيًا كان" في تطبيق العميل الخاص بك كما يلي:

Webreference.Whatever what = new Webreference.Whatever();
what.A = "that works?";
what.B = -1; // FILENOTFOUND

تتيح لك هذه التقنية الحفاظ على تعريف أي بنيات تحتاج إلى تمريرها ذهابًا وإيابًا في مكان واحد (مشروع خدمة الويب).

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