لا يمكن العثور على imetadataexchange في قائمة العقود التي تنفذها الخدمة

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

سؤال

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

ربما يمكن لشخص ما إلقاء نظرة واكتشف خطأً واضحًا لا يمكنني رؤيته.

لدي خدمة Windows ، استضافة عقدين:

  1. iconfigurationservice
  2. IconFigurationAdminservice

ترث خدمة المسؤول من الخدمة القياسية حيث أريد أن ينفذ كلتا العقدين الأساليب الأساسية.

المشكلة هي أنه يمكنني استضافة الخدمات بشكل جيد ، حتى أحاول إضافة MEX.

ثم أحصل على الاستثناء التالي:

لا يمكن العثور على اسم العقد "imetadataexchange" في قائمة العقود التي تنفذها الخدمة "ConfigurationWcfService".

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

<system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="tcpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="serviceBehavior" name="BrightsideGroup.Repa.Configuration.ConfigurationWCFService">
        <endpoint address="ConfigurationService" binding="netTcpBinding"
          bindingConfiguration="tcpBinding" name="tcpConfiguration" contract="BrightsideGroup.Repa.Configuration.IConfigurationWCFService" />
        <endpoint binding="mexHttpBinding" address="mex" name="mex" contract="IMetaDataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://GD01316:9123/Repa" />
            <add baseAddress="http://GD01316:8123/Repa" />
          </baseAddresses>
        </host>
      </service>
      <service behaviorConfiguration="serviceBehavior" name="BrightsideGroup.Repa.Configuration.ConfigurationWCFAdminService">
        <endpoint address="ConfigurationAdminService" binding="netTcpBinding"
          bindingConfiguration="tcpBinding" name="tcpConfigurationAdmin"
          contract="BrightsideGroup.Repa.Configuration.IConfigurationAdminWCFService" />
        <endpoint binding="mexHttpBinding" address="mex" name="mex" contract="IMetaDataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://GD01316:9124/Repa" />
            <add baseAddress="http://GD01316:8124/Repa" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="serviceBehavior">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
هل كانت مفيدة؟

المحلول

لديك الغلاف غير صحيح - تكوين WCF حساس للحالة

 <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />

لاحظ أن "D" لم يتم رسملة IMetadataExchange يمكنك التحقق من ضعف بناء الجملة على MSDN.

نصائح أخرى

أنا أستخدم nettcpbinding للجميع. في حالتي ، كنت أواجه نفس المشكلة وحلها عن طريق إضافة:

(أ) تصرف السلوك = "" إلى نقطة نهاية MEX

<endpoint address="mex" 
          binding="mexTcpBinding" 
          contract="IMetadataExchange" 
          behaviourConfiguration="" />

(ب) تصرف السلوك = "mex" إلى تعريف الخدمة:

<services>
    <service name="AcmeService" behaviourConfiguration="mex">

(ج) إدخال السلوك

<behaviors>
    <serviceBehaviors>
        <behaviour name="mex">
            <serviceDebug includeExceptionDetailInFaults="false"/>
            <serviceMetadata />
        </behavior>
     </serviceBehaviors>
 </behaviors>

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

وحاول أيضًا إضافة ما يلي:

<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top