سؤال

لقد قمت بتعديل الويب الخاص بي.

عندما أحاول تشغيل خدمة الويب الخاصة بي من VS باستخدام عميل اختبار WCF ، أو أذهب إلى صفحة الخدمة ، أحصل على الخطأ:

Metadata publishing for this service is currently disabled.

لقد قارنت الويب. ليس لدي أي فكرة عن القضية.

هذا هو عنصر System.ServicEmodel:

<system.serviceModel>    
<services>
  <service name="BIMIntegrationWS.BIMIntegrationService" behaviorConfiguration="metadataBehavior">
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="http://localhost:1895/BIMIntegrationService.svc" 
              binding="customBinding" bindingConfiguration="customBinding0" 
              contract="BIMIntegrationWS.IBIMIntegrationService"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="metadataBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <customBinding>
    <binding name="customBinding0">
      <binaryMessageEncoding />
      <httpTransport maxReceivedMessageSize="262064"
                   maxBufferSize="262064"
                   maxBufferPoolSize="262064" />
    </binding>
  </customBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"  aspNetCompatibilityEnabled="true"/>

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

أي مساعدة سيكون موضع تقدير كبير.

شكرًا.

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

المحلول

أعتقد أنني "إصلاح" المشكلة. المزيد قادم لاحقًا.

تحرير: من أجل "إصلاح" مشكلتي ، أضفت بشكل أساسي خدمة WCF جديدة إلى طلبي ، ونتقلها عن الواجهة السابقة ، ثم قمت بنسخ جميع التعليمات البرمجية من خدمتي الأصلية وعندما قمت بتعديل ملف .Config (إلى إلى انظر إلى حد كبير مثل الشخص المنشور في السؤال) ، كل شيء يعمل بشكل جيد.

Ofcourse ، أنا أعلم ، كما نعلم جميعًا ، أنه لا يوجد سحر هنا ، يجب أن يكون هناك بعض التناقض. هذا عندما لاحظت/تذكرت ، بعد أن قمت بإنشاء خدمتي الأصلية ، والتي تسمى "bimintegrationservice.svc" ، قررت أن هذا كان طويلًا جدًا من الاسم ، لذلك قمت بإعادة تسمية/أعدت صفي إلى "bimintegrationws". ومع ذلك ، لا يغير القيام بذلك اسم ملف الخدمة (وبالتالي اسم الملف في عنوان HTTP: //).

قصة قصيرة طويلة ، قمت بإجراء تغييرين على .config الخاص بي وكل شيء يعمل:

1) لقد تغيرت:

<service name="BIMIntegrationWS.BIMIntegrationService" behaviorConfiguration="metadataBehavior">

إلى

<service name="BIMIntegrationWS.BIMIntegrationWS" behaviorConfiguration="metadataBehavior">

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

2) لقد وضعت ذلك على خطأ (لأنني لا أتذكر سبب وجوده هناك في المقام الأول) وكل شيء يعمل بشكل جيد.

أظن أنه كان ينبغي عليّ أخذ تلميح عندما بدا أن خدمة الويب الخاصة بي لم تستخدم عنصر "الخدمة" الخاص بي على الإطلاق. :

تحرير 2:

في الواقع ، يمكنك أن ترى في تعليقي الثاني ، في السؤال الأصلي ، أن العلامة التي تم إنشاؤها تلقائيًا كانت تشير إلى: ، على عكس "Bimintegrationservice". كان ينبغي أن يعطها بعيدا.

أشك في أن العديد من الأشخاص الآخرين سيكون لديهم نفس القضية ، ولكن في حالة.

نصائح أخرى

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

تمكنت من تجاوزه عن طريق إنشاء إعدادات التكوين في التطبيق المضيف:

System.ServiceModel.Description.ServiceMetadataBehavior smb = new System.ServiceModel.Description.ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
ServiceBase host = new Servicebase(typeof(MyService), new Uri("http://localhost:1234/"));
host.Description.Behaviors.Add(smb);
host.Open();

...

host.Close();

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

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