القوة. NET خدمة ويب لاستخدام فئة الكائن المحلية، وليس فئة وكيل

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

سؤال

ولدي خدمة ويب التي ادعو من تطبيق نماذج Windows (سواء .NET، سواء في نفس الحل)، وأحب بلدي خدمة ويب للعودة إلى كائن مخصص من أماكن أخرى في المشروع - انها شائعة الاعتراض أن كلا منهما تشترك في إشارة إلى، كما انها في المشروع الثالث في بلدي الحل. عندما أسميه خدمة ويب تقوم بإرجاع "شخص" وجوه، لكنه في مساحة الاسم من خدمة ويب، وانها خلقت من فئة وكيل أن خدمة ويب نفسها ولدت. على هذا النحو، وأنا لا يمكن التلاعب به وإعادته إلى برنامجي، الذي تتوقع "الشخص" الكائن مقرها في النسخة المشتركة للطبقة، وليس نسخة بروكسي من مساحة الاسم خدمة ويب، وأحصل على خطأ عندما أحاول لCTYPE ذلك إلى نوع فئة الصحيح.

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

وتجدر الإشارة - لقد لجأت إلى تمرير كافة المعلمات الأساسية ByRef، واستخدام تلك القيم التي يتم إرجاعها لملء نسخة من الكائن I إنشاء عند عودتهم. لا يمكن أن يكون أفضل طريقة للقيام بذلك!

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

المحلول

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

وأيضا، وهذا لن ينجح الا اذا الدرجة المشتركة الخاصة بك هو تسلسل ومرت من حيث القيمة (أي انها تعرضت كعقد البيانات، وليس كما عقد الخدمة).

نصائح أخرى

إذا كنت تستخدم WCF هل من السهل نسبيا للاستخدام العقود نفس البيانات واجهة خدمة بين العميل والمستهلك. يمكنك إما تجميع في فئة الوكيل الذي تم إنشاؤه وتعديله لاستخدام مساحات الأسماء الصحيحة أو استخدام في ChannelFactory فئة لإنشاء الوكيل الحيوية بالنسبة لك.

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

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

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

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