هل من الممكن أن يعود الكائنات من خدمة ويب?

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

  •  08-06-2019
  •  | 
  •  

سؤال

بدلا من العودة مشترك سلسلة, هل هناك طريقة للعودة الكلاسيكية الكائنات ؟ إذا لم:ما هي أفضل الممارسات ؟ هل تبديل وجوه الخاص بك إلى xml و بناء الكائن على الجانب الآخر ؟ ما هي احتمالات أخرى ؟

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

المحلول

كما ذكر, يمكنك القيام بذلك .الشبكة عن طريق التسلسل.افتراضيا كل الأصلية أنواع تسلسل حتى يحدث هذا التلقائى بالنسبة لك.

ومع ذلك إذا كان لديك أنواع معقدة, تحتاج إلى علامة الكائن مع [Serializable] السمة.الشيء نفسه ينطبق مع أنواع معقدة من الخصائص.

لذلك على سبيل المثال تحتاج إلى أن يكون:

[Serializable]
public class MyClass
{
    public string MyString {get; set;}

    [Serializable]
    public MyOtherClass MyOtherClassProperty {get; set;}
}

نصائح أخرى

إذا كان الكائن يمكن إجراء تسلسل إلى XML و يمكن وصفها في WSDL ثم نعم فمن الممكن أن يعود الكائنات من خدمة ويب.

نعم:في .صافي يسمون هذا التسلسل ، حيث الكائنات تسلسل إلى XML ثم أعيد بناؤها من قبل تستهلك الخدمة مرة أخرى إلى وضعها الأصلي نوع الكائن أو بديلة مع نفس بنية البيانات.

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

لأن لدينا WSDL الملفات واصفا الخدمة, هذا تقريبا الآلي في بعض الأنظمة.

(على سبيل المثال ، لدينا خادم مكتوبة في بيثون نقية وهو استبدال خادم مكتوب في C ، a العميل مكتوب في C++/gSOAP و عميل مكتوب في الكاكاو/Objective-C.نحن نستخدم صوابي يسمح بوصفها إطار اختبار, الذي هو مكتوب في جاوة).

فمن الممكن أن يعود الكائنات من خدمة ويب باستخدام XML.لكن خدمات الإنترنت من المفترض أن تكون منصة نظام التشغيل الملحد.التسلسلية كائن ببساطة يسمح لك لتخزين واسترجاع كائن من تيار بايت مثل ملف.فعلى سبيل المثال ، يمكنك إجراء تسلسل كائن Java, تحويل تيار ثنائي (ربما عن طريق ترميز بالأساس 64 في CDATA الميدان) ونقل ذلك إلى خدمة العميل.

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

أفضل الطرق لإنشاء مخطط XML الذي يمثل الوثيقة إنشاء مثيل من هذا المخطط مع الكائن تفاصيل.

.صافي تلقائيا يفعل هذا مع الأشياء التي هي تسلسل.أنا متأكد جافا يعمل بنفس الطريقة.

هنا هو المادة التي تتحدث عن التسلسل الكائن في .صافي:http://www.codeguru.com/Csharp/Csharp/cs_syntax/serialization/article.php/c7201

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

وآمل أن لا أحد يخلق webservices ببساطة إنشاء سلسلة base64

دانيال مثقب:
كما قال آخرون ، كان ذلك ممكنا.ومع ذلك ، إذا كان كل من الخدمة ، العميل استخدام كائن الذي يحتوي على بالضبط نفس المجال السلوك على حد سواء الجانبين ، ربما لم يكن في حاجة الخدمة في المقام الأول.

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

@ لوماكس:لقد وصف اثنين من السيناريوهات. السيناريو 1: العميل هو rehydrating xml الرسالة مرة أخرى في نفس المجال كائن.واعتبر أن "إرجاع كائن".في تجربتي هذا هو سوء الاختيار و سأشرح هذا أدناه. السيناريو 2: العميل تهيج البشرة, يرطب xml رسالة إلى شيء آخر غير نفس المجال وجوه:أنا 100% وراء هذا, ومع ذلك أنا لا أعتبر هذا إلى إرجاع كائن المجال.انها حقا إرسال رسالة أو DTO.

الآن اسمحوا لي أن أشرح لماذا حقيقية نقية/لا DTO كائن التسلسل عبر خدمة ويب عادة فكرة سيئة.التوكيد:من أجل القيام بذلك في المقام الأول ، إما أن يكون صاحب كل من العميل خدمة أو توفير العميل مع مكتبة الاستخدام بحيث يمكن ترطيب الكائن مرة أخرى في صحيح نوع.المشكلة:هذا كائن المجال كنوع موجود الآن في وينتمي إلى اثنين شبه والمجالات ذات الصلة.مع مرور الوقت, السلوكيات قد تحتاج إلى إضافة في المجال الذي لا معنى له في المجال الآخر وهذا يؤدي إلى تلوث يحتمل أن تكون مؤلمة المشاكل.

أنا عادة الافتراضي إلى السيناريو 2.أنا فقط استخدام السيناريو 1 عندما يكون هناك ساحقة سبب للقيام بذلك.

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

سلمان هو معيار جميلة طريقة تمرير الكائنات في جميع أنحاء شبكة الإنترنت (مثل مجموعة فرعية من جافا سكريبت).العديد من اللغات ميزة المكتبة التي سيتم تحويل سلمان رمز إلى الأم كائن - انظر على سبيل المثال simplejson في بيثون.

لمزيد من المكتبات سلمان ، سلمان صفحة ويب

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

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

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

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