كيف يمكنني تعديل خدمة WCF الخاصة بي للعمل مع صفحات ASP.NET؟

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

  •  23-09-2019
  •  | 
  •  

سؤال

لقد قمت بإنشاء خدمة WCF (.NET 3.5) التي تستمتع بالبيانات من DB وإرجاع قائمة الكائنات. إنه يعمل بشكل جيد. لقد اختبرته باستخدام تطبيق wcftestclient وحصلت على النتائج المطلوبة.

الآن ، حاولت إنشاء تطبيق ويب ASP.NET واستهلاك الخدمة. بعد التمكين <serviceDebug includeExceptionDetailInFaults="true"/> في ملف التكوين ، فإن رسالة الخطأ هي "لم يتم تعيين مرجع الكائن على مثيل لكائن."

كيف يمكنني تعديل الخدمة للعمل مع ASP.NET؟

شكرًا!

تحديث 1 - قمت بإنشاء إشارة إلى الخدمة. عندما قمت بتشغيل تطبيق الاختبار الأساسي للغاية ، استنادًا إلى رمز العينة المعروض على صفحة الويب الافتراضية للخدمة ، حصلت على رسالة "مرجع الكائن لم يتم تعيينه على مثيل لكائن".

تقوم الخدمة بإرجاع النتائج الصحيحة عندما أستخدم أداة اختبار عميل اختبار WCF المتوفرة مع Visual Studio. عندما أحاول استخدام الكود التالي ، كل ذلك في حدث Page_Load ، أحصل على رسالة مرجع الكائن.

PhoneNumberServiceClient client = new PhoneNumberServiceClient();

// Use the 'client' variable to call operations on the service
List<PhoneNumber> phones = client.GetPhoneNumbers();  

// Always close the client.
client.Close();

سأحاول الحصول على بعض معلومات التصحيح الإضافية.

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

المحلول

هل حاولت فتح الخدمة بعد تهيئتها باستخدام:

client.Open();

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

نصائح أخرى

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

أفترض أن تطبيق ASP.NET الخاص بك يتوقع التقاط معلومات معينة من الخدمة التي لم تقم بإعدادها لتقديمها ، وبالتالي خطأ الكائن الفارغ.

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

لقد ذكرت أنك استخدمت عميل الاختبار المدمج ، ولكن عندما تقوم بإنشاء تطبيق العميل الخاص بك (موقع الويب الذي تريد الاتصال بخدمتك الجديدة) هل قمت بتكوين نقطة النهاية (Web.Config) لمطابقة نهاية خدمة WCF الخاصة بك ؟ على سبيل المثال ، يقوم تطبيق عميل يتصل بخدمة WCF مع نقطة نهاية WSHTTPBINDING:

<configuration>
<system.serviceModel>
    <client>
        <endpoint address="http://localhost:8080/ContractorService" binding="wsHttpBinding" contract="ContractorService.IContractorService"
            name="ContractorService_WsHttp">
        </endpoint>
    </client>
</system.serviceModel>

أيضا ، خدمتك هي إرجاع قائمة ، مرجع الخدمة الافتراضي من المحتمل جدًا أن تتوقف عن العميل الخاص بك في Array. انقر بزر الماوس الأيمن على مرجع الخدمة الذي لدى عميلك الآن وحدد مرجع الخدمة ، في المربع المنسدلة لنوع المجموعة ، بدلاً من System.array ، حدد System.Collections.generic.list.

إذا كنت بحاجة إلى تفاصيل حول التكوين ، تحقق هنا http://msdn.microsoft.com/en-us/library/dd936243.aspx

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

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