InvalidOperationException أثناء إنشاء مثيل خدمة ويب wcf

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

  •  09-06-2019
  •  | 
  •  

سؤال

لدي خدمة ويب WCF يتم الرجوع إليها من مكتبة الفصل.بعد تشغيل المشروع، عند إنشاء كائن عميل الخدمة من داخل مكتبة فئة، أتلقى InvalidOperationException مع الرسالة:

لا يمكن العثور على عنصر نقطة النهاية الافتراضي الذي يشير إلى تعاقد "myServicereference.ImyService" في قسم تكوين عميل ServiceModel.قد يكون هذا لأنه لم يتم العثور على ملف تكوين للتطبيق الخاص بك ، أو لأنه لا يمكن العثور على عنصر نقطة نهاية مطابقة لهذا العقد في عنصر العميل.

الكود الذي أستخدمه لإنشاء المثيل هو:

myServiceClient = new MyServiceClient();

من حيث يرث MyServiceClient

System.ServiceModel.ClientBase

كيف يمكنني حل هذا؟

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

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

المحلول

إليك ملف app.config الخاص بمكتبة الفصل:

يجب عليك وضع إعدادات التكوين هذه في ملف التكوين الخاص بالتطبيق الرئيسي.يستخدم تطبيق .NET (الذي يستدعي مكتبة صفك) البيانات من ملف التكوين الخاص به وليس من ملف تكوين مكتبتك.

نصائح أخرى

أو يمكنك تعيين نقطة النهاية في الكود الخاص بك:

http://msdn.microsoft.com/en-us/library/ms731862.aspx

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://url-to-service/");

// Create a client that is configured with this address and binding.
MyServiceClient client = new MyServiceClient(binding, address);

كان لدي حالة مماثلة.كان لدي مكتبة فئة تسمى خدمة ويب، ثم كان لدي ملف .EXE يسمى .DLL الخاص بـ class-lib.أعتقد أن ملف التكوين الخاص بـ .EXE هو الذي يتم استخدامه وليس ملف التكوين .DLL.

ولكن كما قال ريتشارد أعلاه، كان علي أن أقوم بتأهيل مساحة الاسم بشكل كامل.إنه قليل من الألم.أدناه هو بالضبط ما قمت بتغييره.الألم هو أنني اضطررت إلى تغييره في مكانين ، أحدهما في المرجع. cs الذي يتم إنشاؤه عند إنشاء مرجع خدمة ، والآخر في ملف التكوين.وبالتالي، في كل مرة أقوم فيها بتغيير خدمة الويب وإجراء "مرجع التحديث"، لا بد لي من إجراء التغيير على رمز C# مرة أخرى.

1) يجب عليك بالفعل تغيير اسم التكوين في المرجع.cs كما يلي:

من: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

ل: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

2) ثم قم أيضًا بتغيير قيمة "العقد" في جميع ملفات app.config ذات الصلة (لملفات .dll و.exe) كما يلي:

من:

<عنوان نقطة النهاية=http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svcbinding = "wshttpbinding" bindingConfiguration = "wshttpbinding_itwowayasync" contract = "rctwebservice.wcfservice_tfbic_rct_biztalk_orchestrations" name = "wshttpbinding_itwowayavync"

ل:

<عنوان نقطة النهاية=http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svcbinding = "wshttpbinding" bindingConfiguration = "wshttpbinding_itwowayasync" contract = "tfbic.rct.hip.components.rctwebservice.wcfservice_tfbic_rct_biztalk_orchestrations

فقط للتوضيح - كيف عرفت ما هي مساحة الاسم الكاملة؟كانت مساحة اسم البرنامج TFBIC.RCT.HIP.داخل ذلك ، يحتوي رمز C# على بيان مساحة اسم إضافية:

namespace RCTHipComponents

قد يكون من المفيد أن تقوم بنشر ملف app.config، نظرًا لأن هذا النوع من الأخطاء يشير إلى وجود مشكلة في ملف <endpoint> حاجز.تأكد من أن سمة العقد تبدو مناسبة لك.

يحرر:حاول تأهيل قيمة عقدك بشكل كامل؛استخدم مساحة الاسم الكاملة.أعتقد أن هناك حاجة لذلك.

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